總體來說有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>

保存之后,在項目打包配置中添加配置輸出,這樣安裝和卸載應用時,就會自動提示用戶授權,完成應用獲取權限
