[英]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.