搞砸了,我怎么能卸载我的程序?

时间:2012-03-14 11:01:37

标签: wix windows-installer uninstall

我的Wix安装程序正在安装我的程序,但它已卸下以进行卸载。文件过早删除,需要进一步下载。卸载程序失败并恢复其更改。

这意味着我无法从我的机器中删除软件包,因此无法安装我的安装程序的任何其他版本(相当不便)。如何强行拆除包装?

7 个答案:

答案 0 :(得分:22)

  1. C:\Windows\Installer中找到您的软件包,其中Windows保存已安装的MSI软件包的副本。名称是随机生成的,因此您必须查看文件的创建日期。

  2. 使用Orca打开MSI文件。 (遗憾的是,orca安装程序没有简单的下载。您可以通过安装Windows 10 SDK的" MSI工具"然后在C:\Program Files (x86)\Windows Kits中搜索orca.msi来获取它。 )

  3. CustomAction table

  4. 中删除违规的自定义操作

    现在您应该可以卸载软件包了。

    编辑:根据@ darkrock76的回答,步骤1的文件夹也可以是C:\ProgramData\Package Cache\。我在Windows 7 SP1机器上都有。我无法立即找到关于此的文档。


    更新:嗨,Wim,感谢您之前提供的免费注册COM信息!有关此卸载问题的几个更新:darkrock76s答案不正确,please see my comment to him below。此外,您可以将InstallExecuteSequence表中的条件设置为0(数字零== false),以防止它永远运行,而不是删除上面步骤3中的自定义操作。删除自定义操作表条目会留下一些损坏的外键引用(我猜可能会失败)。在诉诸此攻击之前,也可以尝试The Microsoft FixIt tool。除了Orca之外还有some alternative, free MSI tools / editors / viewers(朝下)。也许用户也应该在编辑前制作原始MSI的拉链,但我猜这是隐含的。一旦你得到它,请删除这个凌乱的评论 - 如果我有时间的话,我可以写一些强制卸载的强制摘要(FixIt MS工具,使用次要升级,直接编辑缓存的MSI,应用转换为卸载,以及其他任何东西)。随着部署摇滚:-)。你的免注册COM回答过去曾帮助过我(Stein)。非常感谢。

    忘了一件事:you can find the actual cache MSI file using Powershell。这是针对一个软件包you can also get for all packages(向下滚动到第一个屏幕截图)。

答案 1 :(得分:8)

此命令通常适用于我:

msiexec /fv installer.msi

它在某种程度上会记录安装程序,因此您可以使用更正的安装程序再次尝试。

有一次这个命令不起作用,我不得不使用Microsoft FixIt。它解决了这个问题(对我来说非常震惊)。

答案 2 :(得分:6)

根据您所描述的行为的确切原因,您可能至少有几个选项。

如果失败的原因是在卸载时运行的自定义操作,并且此自定义操作受某些属性影响,您可以尝试通过命令行传递所需的值:

msiexec /x {YOUR-PRODUCTCODE-HERE} RUNMYACTION=false

在此示例中,RUNMYACTION是一个参与自定义操作条件的Windows Installer属性,如果您将false作为其值传递,则该操作将不会运行。

否则,您可以修复逻辑(或者只显式禁用自定义操作)并构建新的MSI包。然后将其上传到该目标计算机,并按以下方式运行:

msiexec /i YourPackage.msi REINSTALL=ALL REINSTALLMODE=vomus

此处YourPackage.msi是一个新的固定包,REINSTALL=ALL指示msiexec使用此新包重新安装产品,并REINSTALLMODE=vomusv它的一部分)将重新缓存MSI包,你将能够以正常的方式将其删除。

附注:您应该在虚拟机上测试您的安装,以免冒着真实风险。

答案 3 :(得分:4)

仅供参考:在Windows 8.1中,安装程序已移至此处:C:\ ProgramData \ Package Cache \

答案 4 :(得分:0)

如果你真的很绝望,以上所有解决方案都不能尝试

msizap.exe

这将清除安装程序在机器上放置的所有内容
小警告

不知道你想用什么选项运行msizap(对于一个选项列表,首先运行msizap /?)。

答案 5 :(得分:-1)

我通常只是在注册表中查找<Your Installer's Name>.msi<Your Installer's Company Name>,并从Windows安装程序树下的某些Products中删除一些卸载密钥,所有内容通常都能正常运行之后,虽然这个 WOULD 会像缓存的安装程序那样留下一些东西,并且每个安装的文件可能还有大量的其他注册表项,但是 ALWAYS 在开发安装程序时对我有用老实说,谁关心一个MSI是否遗留下来并缓存在某个地方?你正在使用机器进行开发,对吗?

答案 6 :(得分:-1)

我也从Microsoft使用了这个小工具

https://support.microsoft.com/en-us/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed

基本上,该工具可用于“修复包括损坏的注册表项在内的问题,这些注册表项会阻止您安装或删除程序”

修复的问题:

  1. 64位操作系统上的注册表项损坏

  2. 控制更新数据的注册表项损坏

  3. 阻止安装新程序的问题

  4. 阻止现有程序完全卸载或更新的问题

  5. 问题阻止您通过“控制面板”中的“添加或删除程序(或程序和功能)”来卸载程序

它可以用于:

  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows 10