【问题标题】:Check if electron app is launched with admin privileges on windows检查电子应用程序是否在 Windows 上以管理员权限启动
【发布时间】:2016-09-16 07:30:04
【问题描述】:

有没有办法检查一个电子应用程序是否以管理员权限启动?

我只找到 electron-sudo 库来执行具有管理员权限的命令。

但我有多个命令要执行,我不想每次都提示用户。

那么我如何检查应用程序是否以管理员权限使用电子启动

最好的办法是在软件中执行一个命令,例如:.isAdminPrivilegesUsed(可以是在 Windows 上执行的脚本),返回 true 或 false,如果为 false:

我会提示用户他必须以管理员权限重新启动软件并关闭它

【问题讨论】:

    标签: windows electron


    【解决方案1】:

    我从 Node 中检查了如何执行此操作,并找到了这个答案:How to know if node-webkit app is running with Administrator/elevated privilege?

    我检查了答案,下载了 node-windows 并尝试了它。但是,该解决方案会打开 UAC 对话框并始终以“用户具有管理权限”进行响应。

    我深入研究了处理 isAdminUser 命令的 node-windows 代码,发现它尝试运行 NET SESSION,如果没有权限,则尝试提升运行它导致 UAC 对话框。

    我取出了提升的部分,最终得到了这个 sn-p:

    var exec = require('child_process').exec; 
    exec('NET SESSION', function(err,so,se) {
          console.log(se.length === 0 ? "admin" : "not admin");
        });
    

    我通过正常运行应用程序并使用“以管理员身份运行”对此进行了测试。上面的代码在不以管理员身份运行时正确显示“not admin”,以管理员身份运行时正确显示“admin”。

    这应该适用于您在问题中引用的 .isAdminPrivilegesUsed 方法的内容。

    【讨论】:

    • 感谢工作就像一个魅力!我使用此代码显示一个弹出窗口以强制用户以管理员权限重新启动软件
    【解决方案2】:

    不能直接回答您的问题。解决此问题的另一种选择是强制应用程序以管理员身份执行。

    这可以通过更新应用程序的清单文件来完成,有关如何使用 Electron 执行此操作的指南在这里:http://layer0.authentise.com/electron-and-uac-on-windows.html

    【讨论】:

    • 谢谢!我喜欢这个选项!
    • 请注意,清单可能会以较低的权限再次更新;)
    【解决方案3】:

    您现在可以使用电子构建工具指定应用应以提升的权限运行:

    电子生成器

    将以下内容添加到您的 package.json:

      "build": {
        "win": {
          "requestedExecutionLevel": "highestAvailable"
        }
      },
    

    highestAvailablerequireAdministrator 可用。详情请见:https://www.electron.build/configuration/win.html#WindowsConfiguration-requestedExecutionLevel

    电子包装器

    当您调用electron-packager 时,添加以下命令行参数:

    --win32metadata.requested-execution-level=highestAvailable
    

    highestAvailablerequireAdministrator 可用。详情请见https://electron.github.io/electron-packager/master/interfaces/electronpackager.win32metadataoptions.html#requested_execution_level

    注意

    这些选项使程序请求提升的权限,而不是检查程序是否以管理员权限运行。

    【讨论】:

    • 一个非常值得“注意”,因为基本上它所做的是更新清单。清单可以用较低的权限再次更新;)
    • @NoobTW:我对 Windows Portable 一无所知,但您使用的是具有管理权限的用户吗?也可以尝试“requireAdministrator”而不是“highestAvailable”。
    • 这不适用于最新版本。查看问题github.com/electron-userland/electron-builder/issues/2936
    【解决方案4】:

    如果您使用的是 electron-packager,只需添加 --win32metadata.requested-execution-level=requireAdministrator。例如:

    electron-packager app --asar=true --platform=win32 --arch=ia32 --win32metadata.requested-execution-level=requireAdministrator --overwrite

    【讨论】:

    • 对于电子包装器用户来说,这个答案非常有帮助。 requireAdministrator 选项在技术上是 in the docs somewhere,但不容易找到。
    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2013-07-20
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多