Windows Electron,Electron builder,nsis,卸载时删除任务
我制作了一个具有管理员权限的应用程序。为了在windows启动时运行应用程序,我做了一个SchTasks,但在卸载时我想删除它。我能得到的最接近的结果是:Windows Electron,Electron builder,nsis,卸载时删除任务,windows,electron,nsis,taskscheduler,electron-builder,Windows,Electron,Nsis,Taskscheduler,Electron Builder,我制作了一个具有管理员权限的应用程序。为了在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 & p
;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
但它返回错误:访问被拒绝。
。这是因为卸载没有管理员权限。我应该怎么做,我应该尝试使用管理员权限执行卸载吗?或者有其他方法来删除任务
我心目中的另一个选择是,如果可执行文件不在path中,则让任务自行删除它
我正在使用的electron package.json:
"win": {
"target": [
"nsis"
],
"requestedExecutionLevel": "requireAdministrator"
},
"nsis": {
"include": "installer/windows/uninstall.nsh",
"allowElevation": true,
"deleteAppDataOnUninstall": true
},
我对Electron builder一无所知,但我知道如果安装程序脚本具有
RequestExecutionLevel Admin
,则卸载程序也将请求Vista+上的提升。如中所述,您需要将以下内容添加到Electron builder.json
(或package.json
的build
部分)提升安装程序:
"nsis": {
"allowElevation": true
}
这是我的解决方案,在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}"
},
我找到了另一种方法,但它会破坏您的“一键式”安装:
"build": {
"nsis": {
"include": "./build/installer.nsh",
"oneClick": false,
"perMachine": true,
"warningsAsErrors": false
}
},
关键问题:oneClick false+perMachine true如果手动提升卸载程序是否有效?@Andreas确实有效,我需要搜索windows命令来提升程序而不执行它,但这不是一种很好的解决方法,但作为最后一件事,我会这么做。@jalanga你解决问题了吗?如果是,请写下如何解决。@Rustam I will pu现在不是我的答案。在windows 10上它还没有。无论您在哪台计算机上生成安装程序,它都是存储在安装程序&uninstaller.exe中的清单属性,您只需要了解如何使用electron-builder进行设置。但它不会提升卸载程序。我更新了我的问题否,我收到错误
错误:退出代码:EACCES.spawn…setup-0.9.2.exe EACCES
和customHeader宏中的原因。每个库都是最新的(包括electron builder和electron),我不能使用“requestedExecutionLevel”:“RequiredAdministrator”。仅当确实需要时才请求。关于错误:退出代码:EACCES
打包时,在管理控制台中运行npm electron builder…
命令似乎可以解决问题。请注意“requestedExecutionLevel”:“requireAdministrator”
不影响安装程序的权限级别,只影响已安装的应用程序所需的权限。