首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式卸载应用程序--即使自定义卸载程序失败

问以编程方式卸载应用程序--即使自定义卸载程序失败
EN

Stack Overflow用户
提问于 2012-09-05 23:49:58
回答 1查看 501关注 0票数 0

我有一个.NET应用程序,它使用自定义安装程序/卸载程序安装服务。

这已经被封装到一个Windows安装程序中,所以当它安装该服务时,它会注册该服务,而当您卸载它时,它会卸载该服务。但是,在某些情况下,自定义卸载程序可能会失败。(在我的例子中,我已经通过调用installutil手动卸载了服务。)

现在,当我试图通过框架卸载该产品时,会出现以下错误:

错误1001卸载时发生异常。此异常将被忽略,卸载将继续进行。但是,卸载完成后,应用程序可能不会完全卸载。->指定的服务不作为已安装的服务存在。

这说得通。除此之外,不管消息说了什么,卸载都会回滚。(这个问题也被描述为这里)。

我知道,如果我手动重新安装服务,卸载可能会工作。

但是我想知道是否有什么方法可以把它从安装的产品列表中强制删除。

我现在卸载它的编程方式是调用

​

代码语言:javascript
复制
    ::MsiConfigureProduct(productCode.c_str(), INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT);

但这只是具有相同的效果,卸载通过控制面板,这是失败的。

我还能采取什么其他方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-06 00:25:08

这就是为什么我告诉人们不要使用Visual部署项目、InstallUtil自定义操作,并且只在VM上安装,而不是在他们自己的机器上安装。

所以你需要做的是:

找到您以前安装的MSI。用虎鲸编辑它,并从InstallExecuteSequence中删除自定义操作(或者在它们上放置一个GOTOHELL=666之类的非操作条件)。

运行以下命令:

代码语言:javascript
复制
msiexec /i foo.msi REINSTALL=ALL REINSTALLMODE=vomus

这将“重述”MSI。现在使用Add/Remove程序卸载程序。

现在切换到一个更好的工具,它实际上公开了ServiceInstall表。重新发明轮子永远不会像你刚刚发现的那样好的结局。不要让它发生在你的客户身上。

最后,使用SC命令停止和删除孤立的服务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12291264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档