Wix/MSI:无法卸载

Jus*_*tin 11 windows-installer wix uninstall

我为内部项目开发了一个Wix安装程序,但完全不小心我发现我无法卸载开发计算机上的安装程序,因为我收到以下错误消息:

您尝试使用的功能是在不可用的网络资源上

带有一个对话框,指向我从特征中安装的.msi路径.(.msi在那里,但是已经重建了,因此我安装后已经改变了)

我很担心这个对话框,因为我相信Windows Installer会跟踪已安装的.MSI文件,但是这个对话框似乎暗示我可以通过删除,移动或更改安装程序来破坏我的卸载程序.

是这样的吗?

我需要做些什么来确保我不会以这种方式破坏我的卸载程序?(我们是否需要保留计算机上安装的所有安装程序版本的副本?)

Rob*_*ing 10

摆脱这种情况的最简单方法是进行重新安装/重新安装.构建一个没有"破坏"的MSI的新版本(以任何方式破坏它,在这种情况下,它可能根本不会被破坏,你只需要一个新的源).然后使用命令行,如:

msiexec /fv path\to\your.msi /l*v i.txt
Run Code Online (Sandbox Code Playgroud)

这会将你的.msi复制到缓存的MSI并进行修复.然后你会在一个更好的地方.


Chr*_*ter 9

编写安装的第一个痛苦教训之一是永远不要在自己的盒子上运行安装.当然,直到它达到成熟点并经历了几个质量保证周期.这就是我们拥有的集成实验室和虚拟机.(有一种关于你不应该在自己的后院做的事情的说法.)

也就是说,通常MSI卸载不需要MSI,但有些情况可能需要它.例如,如果要在卸载期间调用ResolveSource操作,则MSI将查找.MSI.

现在有几种方法可以解决这个问题:

  1. 获取您拥有的MSI并使用ORCA进行编辑,以匹配您安装的MSI的文件名,UpgradeCode,ProductCode和PackageCode.您应该能够从查看存在的剥离的缓存MSI中获取所有这些信息%WINDIR%\Installer.CD到该目录并执行一个findstr -i -m SOMESTRING *.msi SOMESTRING是像ProductName属性一样独特的东西.知道缓存的MSI的名称后,在Orca中打开它以获取所需的属性.然后将这些属性放在您可用的MSI副本中并尝试卸载.不,这不是您安装的确切MSI,但通常它足够接近.

要么

  1. 使用前端窗口安装程序清理实用程序(如果您还有)和/或后端MSIZAP实用程序来擦除MSI和Add/RemovePrograms中应用程序的所有知识.注意,这实际上不会卸载程序,因此您还必须编写脚本或以其他方式手动卸载程序的所有跟踪.

要么

  1. 重新映像您的工作站