2017-01-01 72 views
0

我在MSI安裝程序中使用了Squirrel安裝程序。 MSI安裝程序調用Squirrel安裝程序。由於MSI安裝程序將在添加/刪除程序中具有條目,因此我想刪除(或不創建)由Squirrel安裝程序創建的條目。在不刪除Squirrel.Windows安裝程序中的應用程序的情況下刪除卸載條目

我所做的是在事件處理程序使用RemoveUninstallerRegistryEntryonFirstRun,但它給我以下錯誤:

Couldn't write uninstall icon, don't care: System.IO.IOException: Illegal operation attempted on a registry key that has been marked for deletion. 

基於這個錯誤,我覺得我除去在錯誤的地方卸載項。應該刪除卸載條目的地方是什麼?或者有沒有辦法阻止Squirrel創建這些條目?

+0

當我在安裝程序中使用'-s'標誌時,它將繼續並創建卸載程序條目,因爲它沒有運行第一次安裝。 – skjoshi

回答

0

IMO,你創建了一個「木馬」MSI。您可以在MSI中設置ARPSYSTEMCOMPONENT屬性,並且它不會在「添加刪除程序」中顯示。但說實話,你可能不希望微星公司自己在系統上註冊。在這種情況下,請從您的安裝程序中刪除某些關鍵標準操作,例如PublishComponents,PublishFeatures和PublishProduct。

+0

我不是在創建特洛伊微星,儘管內部安裝程序(松鼠)可以被視爲特洛伊木馬。我不想隱藏MSI條目。我試圖隱藏內部安裝程序的卸載程序條目,因爲此內部安裝程序的卸載命令將由MSI卸載程序調用。我只是想通過爲1個安裝提供2個條目來減少對用戶的混淆。 – skjoshi

+0

這是特洛伊微星的定義。內部安裝者是希臘人。請參閱:https://blogs.msdn.microsoft.com/robmen/2006/02/01/google-toolbar-beta-for-enterprise-a-trojan-horse-msi-package/ –

+0

如果您真的想要MSI的條目在添加刪除程序,以便MSI可以調用卸載,然後調用松鼠卸載然後這真的不是一個MSI的問題。微星的行爲如預期。這是你必須壓制的松鼠。出於好奇,每個用戶或每臺機器的MSI是多少?你的松鼠安裝程序是相同還是不同? –

0

無論您是否應該這樣做,您都可以修改Squirrel以免它創建註冊表項。只需註釋掉對CreateUninstallerRegistryEntry的調用或註釋掉this file中的函數即可。 很容易,只需重建松鼠,並用您的定製版本替換nuget中的參考。
只要你在你的應用程序的大部分引導松鼠,我沒有看到這樣做的任何問題。

相關問題