有没有一种方法可以检查Electron应用程序是否以管理员权限启动?
我只发现了使用electron-sudo库执行具有管理员特权的命令的方法。
但是我有多个命令要执行,不想每次都提示用户。
那么,我如何使用Electron检查应用程序是否以管理员权限启动?
最好的办法就是在软件中执行一个命令,例如:.isAdminPrivilegesUsed(可以在Windows上执行的脚本),它返回true或false,如果是false:
我会提示用户以管理员身份重新启动软件并关闭它
我查找了如何在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 方法的内容应该也有效。
"build": {
"win": {
"requestedExecutionLevel": "highestAvailable"
}
},
在Windows操作系统下,如果您需要以管理员权限运行Electron应用程序,则可以选择在highestAvailable
或requireAdministrator
模式下运行。有关完整详情,请参见:https://www.electron.build/configuration/win.html#WindowsConfiguration-requestedExecutionLevel
当您使用electron-packager
时,请添加以下命令行参数:
--win32metadata.requested-execution-level=highestAvailable
highestAvailable
或requireAdministrator
可用。有关完整详情,请参见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
requireAdministrator
选项在文档中的确有所提及(https://electron.github.io/electron-packager/master/interfaces/electronpackager.win32metadataoptions.html#requested_execution_level),但并不容易找到。 - tscizzlenative-is-elevated
检查权限是否提升,如果没有,则使用 sudo-prompt
提示输入管理员密码。这并不是直接回答你的问题。解决这个问题的另一个选项是强制以管理员身份运行应用程序。
可以通过更新应用程序的清单文件来实现,如何在 Electron 中执行此操作的指南在这里:http://layer0.authentise.com/electron-and-uac-on-windows.html