總體來說有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>
保存之后,在項目打包配置中添加配置輸出,這樣安裝和卸載應用時,就會自動提示用戶授權,完成應用獲取權限