2010-10-13 136 views
4

我们正在发布新版本的应用程序,我们希望它能够从客户端计算机上卸载以前安装的版本。如何以编程方式卸载Windows中的应用程序?

我们将如何做到这一点?

编辑:我正在安装此应用程序(也是以前的版本)与Visual Studio中的部署项目,所以我假设它是一个Windows安装程序。

非常感谢!

+3

什么安装技术你正在用吗? Windows安装程序? NSIS?还有别的吗? – alastairs 2010-10-13 09:25:17

+0

你的应用程序是否已经有卸载程序?为了执行干净安装,您需要回滚哪些类型的数据? – Dennis 2010-10-13 09:29:35

+0

@alastairs:请参阅编辑@ Dennis:我没有卸载程序。基本上我应该删除整个程序文件夹以及我在用户的AppData配置文件中使用的其他文件夹。 – Andrei 2010-10-13 09:31:26

回答

5

Deployement项目有一个内置的功能删除您的应用程序的早期版本。

检查Deployement项目属性中的“RemovePreviousVersions”属性。

http://msdn.microsoft.com/library/y63fxdw6.aspx

编辑

从MSDN:

安装程序将检查的UpgradeCode和 产品代码属性,以确定是否 早期版本应该 删除。升级代码必须是 两个版本相同;产品代码必须有所不同。

+0

如果这项工作,我会拍摄自己,并给你一枚奖章。谢谢你的回答,我会告诉你它是否有效!我如何更新UpgradeCode? – Andrei 2010-10-13 10:10:28

+0

我不确定这个选项会达到你想要的。从提供的信息来看,这听起来像是这是第一次使用安装程序安装应用程序(否则,它将有一个本来可以运行的卸载程序)。 – Dennis 2010-10-13 10:42:33

+0

在应用程序删除以前的版本之前,有什么办法可以触发某些方法吗? – Andrei 2010-10-13 12:33:14

0

如果你这样编程,那么这是一个简单的反向批处理。
或者你可以使用Visual Studio中的一些安装/卸载建设者像NSIS

1

微软安装程序(* .msi)格式支持你想做的事,不幸的是Visual Studio只提供有限的定制,并且被设计用于基本项目。

在这个话题上有很多资源,许多其他人也提出类似的问题。我最好的建议将花一些时间研究MSDN文档。

...

更新

确定。花30分钟阅读几篇文章后,我认为可以使用您使用新安装程序打包的自定义操作。

请按照有关creating a Custom Action的MSDN文章。它包括创建一个新的类库,添加一个System.Configuration.Install.Installer类,将其作为输出添加到安装项目,然后然后将其选作自定义操作。

要查看您的自定义操作选项卡,请右键单击安装项目,然后选择视图>自定义操作。

从这里开始:您需要编写代码来删除安装目录和AppData配置文件。这篇关于如何设置Custom Action Data的文章可能会有所帮助。

祝你好运。

HTH,

丹尼斯

+0

感谢您的帮助丹尼斯。我确实为安装和卸载设置了自定义操作。问题是以前的版本没有设置相同的动作。删除安装目录不会卸载应用程序(就像从控制面板那样)。 – Andrei 2010-10-13 10:53:52

+0

@Andrei:从我的理解中,你应该能够使用自定义操作实现你想要的。检查安装目录是否存在,AppData配置文件是否存在,如果存在,请删除它们。如果将任何密钥写入注册表,找到并删除它们。这只是这个版本的临时补丁,因为下次你将有适当的卸载程序来运行。也许你还应该研究你的应用程序结构并重新考虑你的部署选项。顺便说一句:你的安装基地有多大? – Dennis 2010-10-13 11:23:40

4

如果您使用批处理或为您发布其他自动部署工具,您可以轻松地使用下面的命令行卸载MSI产品:

 
msiexec [/uninstall | /x] [Product.msi | ProductCode] 
+0

嘿詹姆斯。 +1为我想要做的,但我也希望我的应用程序能够“抓住”我的ProductCode,而无需每次进行软件更新时都必须手动进行硬编码。任何想法如何做到这一点? – jp2code 2011-04-07 16:43:34

相关问题