总体来说有2种办法
第一种直接修改注册表
const {Registry} = require('rage-edit'); const {app } = require('electron'); module.exports = (cbSus,cbErr)=>{ Registry.set( 'HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers', app.getPath('exe'), 'RUNASADMIN', 'REG_SZ', ) } const {exec} = require('child_process'); const dosCommand = `REG ADD HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers /v app.getPath('exe') /t REG_SZ /d RUNASADMIN /f` exec(dosCommand, { encoding: 'utf-8' }, function(err: any, stdOut: any) { if (err) { console.log('error:' + err.toString()); } })
这种方法的缺点是本身操作注册表可能就会遇到权限问题
第二种则更为稳妥
在打包electron应用的时候,添加程序清单文件,提升应用权限。
在项目根目录下添加name.manifest
写入内容:
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 3 <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="ApplicationController.exe.manifest" type="win32"></assemblyIdentity> 4 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 5 <security> 6 <requestedPrivileges> 7 <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel> 8 </requestedPrivileges> 9 </security> 10 </trustInfo> 11 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 12 <application> 13 <!--The ID below indicates application support for Windows Vista --> 14 <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 15 <!--The ID below indicates application support for Windows 7 --> 16 <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 17 </application> 18 </compatibility> 19 </assembly>
保存之后,在项目打包配置中添加配置输出,这样安装和卸载应用时,就会自动提示用户授权,完成应用获取权限