我有一个安装项目,它使用System.Configuration.Install.Installer
类来处理一些自定义操作。我在Uninstall
方法中的逻辑是抛出异常(确切地说是空引用异常),导致卸载退出而不实际卸载任何东西。
我知道导致问题的原因并更改了Uninstall
方法中的代码,但这没关系,因为如果我尝试通过控制面板卸载程序,它将不会有更改我如此,它将继续异常,如果我尝试通过VS2010中的安装项目的上下文菜单卸载,它似乎没有使用重建的安装项目,并尝试通过控件卸载时发生同样的事情面板。
我觉得自己陷入了困境之中。有没有其他人陷入这种情况,如果是这样,你怎么绕过它呢?
答案 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