如何删除在卸载过程中抛出异常的安装?

时间:2011-02-22 21:32:11

标签: visual-studio-2010 deployment installer

我有一个安装项目,它使用System.Configuration.Install.Installer类来处理一些自定义操作。我在Uninstall方法中的逻辑是抛出异常(确切地说是空引用异常),导致卸载退出而不实际卸载任何东西。

我知道导致问题的原因并更改了Uninstall方法中的代码,但这没关系,因为如果我尝试通过控制面板卸载程序,它将不会有更改我如此,它将继续异常,如果我尝试通过VS2010中的安装项目的上下文菜单卸载,它似乎没有使用重建的安装项目,并尝试通过控件卸载时发生同样的事情面板。

我觉得自己陷入了困境之中。有没有其他人陷入这种情况,如果是这样,你怎么绕过它呢?

2 个答案:

答案 0 :(得分:2)

This Question完美地回答了我的问题。

基本上,我只是重新编译了System.Configuration.Install.Installer dll文件而没有Uninstall方法中的任何逻辑。使用新编译的程序手动替换位于程序安装位置的dll,然后再次尝试卸载程序。卸载程序将使用新的dll文件,不会抛出异常(因为我从该方法中删除了所有代码)。

然后我能够修复我的代码并制作新的安装程序。

作为一个以防万一,我把我的所有卸载逻辑都放到try块中并且正在捕捉Exception,你可以认为它很糟糕,但至少它保留了我对方法所做的任何更改从崩溃的卸载过程(对我来说,这只是意味着一些配置文件可能会被遗忘而没有正确清理)。

答案 1 :(得分:0)

您可以尝试使用此命令(使用实际的MSI路径)来恢复固定的MSI:

msiexec.exe /fv <path_to_new_msi>

您也可以尝试使用Windows SDK中的MsiZap.exe:

http://msdn.microsoft.com/en-us/library/aa370523(VS.85).aspx