检查 Electron 应用程序是否在 windows 上以管理员权限启动

Check if electron app is launched with admin privileges on windows

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

我只找到 electron-sudo lib 以管理员权限执行命令。

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

那么如何检查应用程序是否启动 具有管理员权限using electron

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

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

我检查了如何从 Node 执行此操作并找到了这个答案:

我检查了答案,下载了 node-windows 并尝试了。然而,该解决方案会打开 UAC 对话框并始终以 "The user has administrative privileges" 响应。

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

我取出了提升的部分并以这个片段结束:

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

我通过 运行 正常运行应用程序并使用 "Run as Administrator" 对此进行了测试。上面的代码在不是 运行 作为管理员时正确显示 "not admin",在 运行 作为管理员时正确显示 "admin"。

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

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

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

您现在可以使用 electron 构建工具指定应用程序应该 运行 具有提升的权限:

电子生成器

将以下内容添加到您的 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

备注

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

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

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

一个流行的 Electron 应用程序有解决这个问题的方法 https://github.com/microsoft/vscode

package.json 文件中,它们有两个有用的依赖项:

他们使用 native-is-elevated 检查是否提升了权限,如果没有,则使用 sudo-prompt 提示输入管理员密码。

您可以在此处阅读该过程的源代码: https://github.com/microsoft/vscode/blob/8845f89c1e4183b54126cd629cd45c8f0f7549f2/src/vs/platform/native/electron-main/nativeHostMainService.ts#L491

我在这里使用这种方法创建了一个示例 Electron 应用程序: https://github.com/kmturley/electron-runas-admin