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

10

有没有一种方法可以检查Electron应用程序是否以管理员权限启动?

我只发现了使用electron-sudo库执行具有管理员特权的命令的方法。

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

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

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

我会提示用户以管理员身份重新启动软件并关闭它

5个回答

11

我查找了如何在Node中完成此操作,并找到了这个答案:如何知道node-webkit应用程序是否具有管理员/提升的特权?

我查看了答案,下载了node-windows并尝试了它。然而,该解决方案弹出UAC对话框并始终回复“用户具有管理员权限”。

我深入了解了处理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");
    });

我通过正常运行应用程序和使用“以管理员身份运行”来测试了这一点。以上代码在非管理员权限下正确显示“not admin”,在管理员权限下运行时显示“admin”。

这对于你在问题中提到的 .isAdminPrivilegesUsed 方法的内容应该也有效。


谢谢,运行得非常好!我使用这段代码来显示一个弹出窗口,强制用户以管理员权限重新启动软件。 - Aaleks
从正常的命令提示符(cmd)启动时确实可以工作,但在PowerShell中不行 =) - Gary Klasen

9
现在,您可以使用electron构建工具指定应用程序以提升的权限运行:
电子生成器
将以下内容添加到您的package.json文件中:
  "build": {
    "win": {
      "requestedExecutionLevel": "highestAvailable"
    }
  },

在Windows操作系统下,如果您需要以管理员权限运行Electron应用程序,则可以选择在highestAvailablerequireAdministrator模式下运行。有关完整详情,请参见:https://www.electron.build/configuration/win.html#WindowsConfiguration-requestedExecutionLevel

electron-packager

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

--win32metadata.requested-execution-level=highestAvailable

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

注意

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


非常值得注意的一点是,基本上这个操作是更新清单。清单可以再次使用较低的权限进行更新 ;) - Konstantin
@NoobTW:我对Windows Portable一无所知,但你是否使用具有管理员权限的用户?另外尝试使用"requireAdministrator"而不是"highestAvailable"。 - DBolton
2
这对于最新版本不起作用。请参见问题 https://github.com/electron-userland/electron-builder/issues/2936 - Y. Tarion

6
如果您正在使用 electron-packager,只需添加 --win32metadata.requested-execution-level=requireAdministrator。例如: electron-packager app --asar=true --platform=win32 --arch=ia32 --win32metadata.requested-execution-level=requireAdministrator --overwrite

1
对于electron-packager的用户来说,这个答案非常有帮助。requireAdministrator选项在文档中的确有所提及(https://electron.github.io/electron-packager/master/interfaces/electronpackager.win32metadataoptions.html#requested_execution_level),但并不容易找到。 - tscizzle

2
一款受欢迎的 Electron 应用程序已经为这个问题提供了解决方案。https://github.com/microsoft/vscode 在 package.json 文件中,它们有两个有用的依赖项: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

1

1
谢谢!我喜欢这个选项! - Aaleks
请注意,清单可能会再次以较低的权限进行更新 ;) - Konstantin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接