【问题标题】:Electron, electron-builder, nsis, remove SchTasks at uninstallElectron、electron-builder、nsis、卸载时删除 SchTasks
【发布时间】:2018-12-06 10:07:59
【问题描述】:

我制作了一个以管理员权限运行的应用。为了在 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 执行卸载吗?还是有其他方法可以移除任务?

如果可执行文件不在路径中,我的另一个选择是让任务自行删除它。

我正在使用的电子包.json:

"win": {
  "target": [
    "nsis"
  ],
  "requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
  "include": "installer/windows/uninstall.nsh",
  "allowElevation": true,
  "deleteAppDataOnUninstall": true
},

【问题讨论】:

  • 手动提升卸载程序是否有效?
  • @Andreas 确实如此,我需要搜索 windows 命令来提升程序而不执行它,但这不是解决它的好方法,但作为最后一件事我会这样做。
  • @jalanga 你解决了这个问题吗?如果是,请写出方法。
  • @Rustam 我现在就回答。

标签: windows electron nsis taskscheduler electron-builder


【解决方案1】:

我对 Electron-builder 一无所知,但我知道如果安装程序脚本有 RequestExecutionLevel Admin,那么卸载程序也会在 Vista+ 上请求提升。

【讨论】:

  • 在 Windows 10 上没有
  • 在哪台机器上生成安装程序无关紧要,它是一个存储在installer&uninstaller .exe中的manifest属性,你只需要弄清楚如何使用electron-builder进行设置。
【解决方案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}"
},

【讨论】:

  • 不,我收到错误 Error: Exit code: EACCES. spawn ...setup-0.9.2.exe EACCES 和 customHeader 宏中的原因。每个库都是最新的(电子生成器和电子)
  • 我不能使用“requestedExecutionLevel”:“requireAdministrator”。仅在真正需要时才请求
  • 关于打包时的Error: Exit code: EACCES,似乎在管理控制台中运行npm electron-builder ... 命令可以解决问题。
  • 请注意,"requestedExecutionLevel": "requireAdministrator" 不会影响安装程序的权限级别,而只会影响已安装的应用程序所需的权限。
【解决方案3】:

documentation 中所述,您需要将以下内容添加到您的electron-builder.json(或package.jsonbuild 部分)以提升您的安装程序:

"nsis": {
    "allowElevation": true
}

【讨论】:

  • 但它并没有提升卸载程序。我更新了我的问题
【解决方案4】:

我找到了另一种方法,但它会破坏您的“一键式”安装:

"build": {
    "nsis": {
      "include": "./build/installer.nsh",
      "oneClick": false,
      "perMachine": true,
      "warningsAsErrors": false
    }
  },

关键点:oneClick false + perMachine true

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 2019-06-08
    • 2019-12-28
    • 1970-01-01
    • 2018-07-03
    • 2020-03-26
    • 1970-01-01
    • 2019-07-26
    • 2020-05-26
    相关资源
    最近更新 更多