2010-07-20 55 views
0

我需要防止在我的CustomActions託管代碼中運行Installer.Commit方法。 如果我只是在重寫的Commit方法中不做任何事情,它仍然會提交(它在程序和功能列表中創建一個元素),我不想那樣做。如何防止Installer.Commit()運行?

如果我說base.Commit(null)它停止,但彈出一個錯誤。我怎樣才能在沒有任何信息的情況下靜靜地做這件事

我可以以某種方式更改savedState,因此它不會實際提交安裝嗎?

+0

您是否需要首先依靠安裝程序?似乎你對付MSI提供的基本功能,所以也許完全不同的方法可能更適合? – 2010-07-20 16:35:51

+0

是的。我需要依靠安裝程序。但在那一點上,我需要跳過Commit()。或者,如果它不可能簡單地跳過它,我需要從註冊表中刪除所有關於安裝的程序的信息... 我不能調用msiexec.exe,因爲它不起作用。另一個進程(安裝的主線程已經從msiexec.exe下運行)... – Agzam 2010-07-20 16:42:52

回答

1

該提交不負責將您的產品發佈到ARP。 Windows安裝程序通過PublishProduct標準操作執行此操作,您可以使用ARPSYSTEMCOMPONENT屬性將其禁用,不同之處在於您使用的安裝創作工具實際上並未公開此操作(或其他任何MSI可以執行的操作)。

http://msdn.microsoft.com/en-us/library/aa367750(v=VS.85).aspx

如果你想有你不應該使用VDPROJ或InstallUtil/InstallerClass自定義操作高質量的安裝程序。

0

在這種情況下,我沒有找到任何解決方案,但在Commit()後立即刪除註冊表項。

我已經刪除了所有的鑰匙,

HKLM \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Installer程序\的UserData \產品 其中UninstalString值包含(應用程序的GUID)產品代碼

我也刪除 HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall其中子鍵名稱==產品代碼

我猜還有一些東西剩下。我不確定。