2010-10-13 125 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

相關問題