Wix / MSI:无法卸载

时间:2010-08-18 01:02:03

标签: wix windows-installer uninstall

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

  

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

带有一个对话框,指向我从feature中安装的.msi的路径。 (.msi在那里,但是已经重建了,所以自从我安装后它已经改变了)

我对此对话框感到担心,因为我认为Windows Installer会跟踪已安装的.MSI文件,但是此对话框似乎表明我可以通过删除,移动或更改安装程序来破坏卸载程序。

是这样的吗?

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

4 个答案:

答案 0 :(得分:10)

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

msiexec /fv path\to\your.msi /l*v i.txt

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

答案 1 :(得分:9)

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

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

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

  1. 获取您拥有的MSI并使用ORCA进行编辑,以匹配您安装的MSI的文件名,UpgradeCode,ProductCode和PackageCode。您应该能够通过查看%WINDIR%\Installer中存在的已剥离缓存MSI来获取所有这些信息。 CD到该目录并执行findstr -i -m SOMESTRING *.msi,其中SOMESTRING是像您的ProductName属性一样唯一的东西。知道缓存的MSI的名称后,在Orca中打开它以获取所需的属性。然后将这些属性放在您可用的MSI副本中并尝试卸载。不,这不是你安装的确切MSI,但通常它足够接近。
    1. 使用前端窗口安装程序清理实用程序(如果您还有)和/或后端MSIZAP实用程序来擦除MSI和Add / RemovePrograms中应用程序的所有知识。注意,这实际上并没有卸载程序,因此您还必须编写脚本或以其他方式手动卸载程序的所有跟踪。
      1. 重新映像工作站

答案 2 :(得分:1)

如果你确切知道出了什么问题(在开发过程中通常就是这种情况),我更喜欢打开Windows将用于卸载的MSI文件,并使用Orca等工具直接编辑它来修复或删除导致该部分的部分失败。

例如:

  • 在%WINDIR%\ Installer中找到MSI文件。卸载失败后,MSI应该是该文件夹中最后编辑的MSI文件。
  • 使用Orca打开msi文件。
  • 删除失败的部分 - 例如失败的InstallExecuteSequence操作,这是非典型的情况。
  • 保存msi并关闭Orca以释放对msi文件的锁定。

答案 3 :(得分:0)

1 - 您是否在安装过程中尝试过“从源运行”?

这是功能树中的一个选项,允许您从其安装源运行某些文件。这通常与网络上的管理员图片结合使用。见下图。我没有尝试过,但我认为这可能会导致:“您尝试使用的功能是在网络资源上不可用”如果网络已关闭且您正在尝试卸载。只是一个理论,还有其他方法可以实现。

enter image description here

2 - 您是否正在运行脚本自定义操作?如果是这样,您是否解压缩到tmp文件夹或从已安装的文件或二进制表运行?如果是这样,自定义操作是否仅在安装时运行?

3 - 您是否正在运行指向已安装文件的 EXE自定义操作?如果是这样,该文件可能无法在网络上访问。

4 - 您的 userprofile文件夹是否已重定向到网络共享?

5 - 您是否直接在网络上的文件夹中安装任何内容

还有很多其他的可能性。