Электрон, строитель электронов, 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
}
Другие вопросы по тегам