检查 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"
}
},
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
一个流行的 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
有没有办法检查电子应用程序是否以管理员权限启动?
我只找到 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"
}
},
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
一个流行的 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