Электрон, строитель электронов, nsis, удалите SchTasks в unisntall
Я сделал приложение, которое работает с правами администратора. Чтобы запустить приложение при запуске 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.
, Это потому, что деинсталляция не имеет прав администратора. Что мне делать, если я должен попытаться выполнить удаление с правами администратора? Или есть другой способ убрать задачу?
Другой вариант, на мой взгляд, состоит в том, чтобы сделать задачу удалить его самостоятельно, если исполняемый файл не находится в пути.
Пакет электронов.json я использую:
"win": {
"target": [
"nsis"
],
"requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
"include": "installer/windows/uninstall.nsh",
"allowElevation": true,
"deleteAppDataOnUninstall": true
},
2 ответа
Вот мое решение в файле 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
package.json
"win": {
"target": [
"nsis"
],
"requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
"include": "installer/windows/installer.nsh",
"allowElevation": true,
"deleteAppDataOnUninstall": true,
"artifactName": "${productName}.${ext}"
},
Я ничего не знаю об Electron-builder, но знаю, что если сценарий установщика имеет RequestExecutionLevel Admin
тогда деинсталлятор также запросит повышение прав на Vista+.
Я нашел другой способ, но он нарушит вашу установку "одним щелчком":
"build": {
"nsis": {
"include": "./build/installer.nsh",
"oneClick": false,
"perMachine": true,
"warningsAsErrors": false
}
},
Ключевой момент: oneClick false + perMachine true
Как указано в документации, вам необходимо добавить следующее в ваш electron-builder.json
(или build
раздел вашего package.json
) чтобы поднять ваш установщик:
"nsis": {
"allowElevation": true
}