可以在没有管理权限的情况下编写NSIS卸载信息?

时间:2012-04-30 20:20:14

标签: permissions registry nsis uninstall user-permissions

最近我将基于NSIS的安装程序从安装更改为“程序文件”文件夹以安装到本地用户文件夹,以便在没有管理UAC提升的情况下安装普通用户帐户(类似于SkyDrive或Google Chrome的工作方式)

要启用卸载,安装程序会使用以下内容:

; Shortcut for the key.
!define REG_U "Software\Microsoft\Windows\CurrentVersion\Uninstall\ZetaUploader"

; Write uninstall strings.
WriteRegStr HKLM "${REG_U}" "DisplayName" "Zeta Uploader ${VERSION}"
WriteRegStr HKLM "${REG_U}" "DisplayVersion" "${VERSION}"
WriteRegStr HKLM "${REG_U}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "${REG_U}" "Publisher" "Zeta Software GmbH"
WriteRegStr HKLM "${REG_U}" "URLInfoAbout" "https://www.zeta-uploader.com"

在使用管理权限运行时效果很好但在使用用户权限运行时失败(无声)。

我的问题是:

是否有可能在没有管理权限的情况下添加到中央卸载控制面板窗口?

我尝试搜索类似于HKCU密钥的HKLM密钥以进行卸载但未找到任何密钥。另外我知道我可以写一个开始菜单条目来卸载,但我不想让我的用户太容易删除应用程序。

更新1 /解决方案:

根据Anders answer,我发现this blog postingthis example NSI script以同样的方式解释了它。

所以最终解决方案如下:

; Shortcut for the key.
!define REG_U "Software\Microsoft\Windows\CurrentVersion\Uninstall\ZetaUploader"

; Write uninstall strings.
WriteRegStr HKCU "${REG_U}" "DisplayName" "Zeta Uploader ${VERSION}"
WriteRegStr HKCU "${REG_U}" "DisplayVersion" "${VERSION}"
WriteRegStr HKCU "${REG_U}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKCU "${REG_U}" "Publisher" "Zeta Software GmbH"
WriteRegStr HKCU "${REG_U}" "URLInfoAbout" "http://www.zeta-uploader.com"

(请注意,第一个代码段中的HKLM已替换为HKCU。)

1 个答案:

答案 0 :(得分:2)

您在正确的轨道上,HKCU与HKLM具有相同的子路径是正确的位置。

它默认不存在,但应该适用于任何最新版本的Windows(不适用于Win9x,不确定NT4和2000)