[英]Electron, electron-builder, nsis, remove SchTasks at uninstall
我制作了一个以管理员权限运行的应用程序。 为了在 Windows 启动时运行该应用程序,我创建了一个 SchTasks,但在卸载时我想将其删除。 我能得到的最接近的是:
;script used to remove the auto launch scheduled task
!macro customUnInstall
ExpandEnvStrings $0 %COMSPEC%
ExecWait `"$0" /c "SchTasks /Delete /TN task_name /F & pause"`
!macroend
但它返回ERROR: Access is denied.
. 这是因为卸载没有管理员权限。 我该怎么办,我应该尝试使用 admin priv 执行卸载吗? 或者有另一种方法来删除任务?
我认为的另一个选择是,如果可执行文件不在路径中,则让任务自行删除。
我正在使用的电子 package.json:
"win": {
"target": [
"nsis"
],
"requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
"include": "installer/windows/uninstall.nsh",
"allowElevation": true,
"deleteAppDataOnUninstall": true
},
我对 Electron-builder 一无所知,但我知道如果安装程序脚本具有RequestExecutionLevel Admin
那么卸载程序也会在 Vista+ 上请求提升。
这是我的解决方案,在 nsh 文件中。
!macro customHeader
RequestExecutionLevel admin
!macroend
!macro customUnInstall
${ifNot} ${isUpdated}
; remove the scheduled task
ExpandEnvStrings $0 %COMSPEC%
ExecWait `"$0" /c "SchTasks /Delete /TN name /F"`
; delete registry for uninstaller - run as admin
SetRegView 64
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$LOCALAPPDATA\Programs\name\Uninstall name.exe"
SetRegView 32
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$LOCALAPPDATA\Programs\name\Uninstall name.exe"
${endIf}
!macroend
包.json
"win": {
"target": [
"nsis"
],
"requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
"include": "installer/windows/installer.nsh",
"allowElevation": true,
"deleteAppDataOnUninstall": true,
"artifactName": "${productName}.${ext}"
},
如文档中所述,您需要将以下内容添加到您的electron-builder.json
(或您的package.json
的build
部分)以提升您的安装程序:
"nsis": {
"allowElevation": true
}
我找到了另一种方法,但它会破坏您的“一键式”安装:
"build": {
"nsis": {
"include": "./build/installer.nsh",
"oneClick": false,
"perMachine": true,
"warningsAsErrors": false
}
},
关键:oneClick false + perMachine true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.