添加/删除程序条目缺失

时间:2012-12-13 22:09:51

标签: windows installer registry nsis

我有NSI脚本和已编译的安装程序,其中包含以下代码:

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$\"$INSTDIR$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString " "$\"$INSTDIR\uninstall.exe$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "Publisher" "${COMPANY}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "URLInfoAbout" "${WEBSITE}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "3.0.0"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoModify" "1"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoRepair" "1"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "EstimatedSize" "400"

这会在安装时编译并创建所有密钥。我可以在RegEdit中看到它们。但它们没有显示在“添加/删除程序”列表中。无论我删除或添加什么参数。

我尝试使用完全相同的值创建新Key,并在列表中显示DID。两个密钥的权限完全相同。

修改

这不适用于Windows Vista和7,x64和x86。 文件未经过数字签名。 Path包含空格,但它封装在双括号中。 密钥名称$ {NAME}包含两个空格。

2 个答案:

答案 0 :(得分:2)

它是由“UninstallString”在名称后面有意外空格引起的,因此Windows没有将其识别为正确的条目。

答案 1 :(得分:1)

如果要在64b操作系统上安装32b应用程序,或许可以帮助切换到注册表的32b部分(创建密钥之前Wow6432Node下面的分支?

SetRegView 32
WriteRegStr HKLM [...]

您的密钥将显示在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\your_name