2

最近,我将基于 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 的回答,我发现这篇博客文章使用这个示例 NSI 脚本以同样的方式解释它。

所以最终的解决方案如下:

; 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)。

4

1 回答 1

2

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

它默认不存在,但可以在任何最新版本的 Windows 上运行(不适用于 Win9x,不确定 NT4 和 2000)

于 2012-05-01T05:06:41.890 回答