我有一个.NET应用程序,它使用自定义安装程序/卸载程序安装服务。
这已经被封装到一个Windows安装程序中,所以当它安装该服务时,它会注册该服务,而当您卸载它时,它会卸载该服务。但是,在某些情况下,自定义卸载程序可能会失败。(在我的例子中,我已经通过调用installutil手动卸载了服务。)
现在,当我试图通过框架卸载该产品时,会出现以下错误:
错误1001卸载时发生异常。此异常将被忽略,卸载将继续进行。但是,卸载完成后,应用程序可能不会完全卸载。->指定的服务不作为已安装的服务存在。
这说得通。除此之外,不管消息说了什么,卸载都会回滚。(这个问题也被描述为这里)。
我知道,如果我手动重新安装服务,卸载可能会工作。
但是我想知道是否有什么方法可以把它从安装的产品列表中强制删除。
我现在卸载它的编程方式是调用
::MsiConfigureProduct(productCode.c_str(), INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT);但这只是具有相同的效果,卸载通过控制面板,这是失败的。
我还能采取什么其他方法?
发布于 2012-09-06 00:25:08
这就是为什么我告诉人们不要使用Visual部署项目、InstallUtil自定义操作,并且只在VM上安装,而不是在他们自己的机器上安装。
所以你需要做的是:
找到您以前安装的MSI。用虎鲸编辑它,并从InstallExecuteSequence中删除自定义操作(或者在它们上放置一个GOTOHELL=666之类的非操作条件)。
运行以下命令:
msiexec /i foo.msi REINSTALL=ALL REINSTALLMODE=vomus这将“重述”MSI。现在使用Add/Remove程序卸载程序。
现在切换到一个更好的工具,它实际上公开了ServiceInstall表。重新发明轮子永远不会像你刚刚发现的那样好的结局。不要让它发生在你的客户身上。
最后,使用SC命令停止和删除孤立的服务。
https://stackoverflow.com/questions/12291264
复制相似问题