检查电子应用是否在Windows上以管理员权限启动

时间:2016-05-19 12:12:09

标签: windows electron

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

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

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

那么如何使用电子来检查应用是否已启动

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

我将提示用户他必须使用管理员权限重启软件并关闭它

4 个答案:

答案 0 :(得分:5)

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

我检查了答案,下载了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");
    });

我通过正常运行应用程序并使用"以管理员身份运行"来测试这一点。上面的代码正确显示"而非管理员"不以管理员身份运行时" admin"以管理员身份运行时。

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

答案 1 :(得分:2)

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

如果您使用电子构建器,请将以下内容添加到package.json:

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

如果您使用的是电子打包程序,请使用API​​中指定的“请求执行级别” https://github.com/electron-userland/electron-packager/blob/master/docs/api.md

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

答案 2 :(得分:2)

如果您使用的是电子打包器,只需添加--win32metadata.requested-execution-level=requireAdministrator即可。例如:

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

答案 3 :(得分:1)

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

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