我在使用 InstallShield 以及所有 .msi 安装程序附带的所有包袱时遇到了很多问题。所以我一直在考虑编写自己的安装程序框架。我预计会遇到的第一个问题是卸载。当用户打开“设置”->“应用程序”或 appwiz.cpl 并双击该程序时,就会开始卸载。我认为这将由存储在 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall{GUID}\UninstallString 中的字符串启动,(其形式为“msiexec.exe /x{GUID}”) ),所以我修改了该值以指向我编写的一个简单应用程序,该应用程序基本上会弹出一个 hello-world 对话框。但这是行不通的。我在注册表的其他地方找到了它并在那里进行了更改。它仍然会启动应用程序的卸载,就好像它正在运行 msiexec.exe /x{GUID} (这是我替换的值)。有人对我如何改变这种行为有任何想法吗?
UninstallString 确实是从 Windows UI 卸载程序时执行的命令。
UninstallString
和 DisplayName
是卸载程序子项中唯一必需的值。
但是,修改其他应用程序并不是测试此问题的最佳方法,因为您可能会编辑错误的值(密钥中的 WOW6432Node 表示在这种情况下您正在编辑 32 位应用程序)。某些版本的 Windows 也可能将此信息缓存在其他位置。最好只编写自己的条目进行测试:
REGEDIT4
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SoTest]
"UninstallString"="cmd.exe /c echo.Uninstall me?&pause® delete HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\SoTest /f"
"DisplayName"="Uninstaller Test"
(另存为test.reg并双击)