2011-02-11 14 views
0

我已經在C#中實現了一個WiX自定義操作,以檢查Windows防火牆是打開還是關閉。用於檢查防火牆狀態的WiX自定義操作導致安裝程序失敗

我使用C#控制檯應用程序測試了代碼,它的工作沒有問題。

然而,當我在一個WiX的自定義操作使用它的代碼會導致安裝程序在運行時出現故障,在該MSIEXEC錯誤日誌中出現以下錯誤:

DEBUG:錯誤2755:服務器返回意外錯誤1622試圖 nstall包MyInstaller.msi。 安裝程序在安裝此軟件包時遇到意外錯誤。 這可能表示此軟件包有問題。錯誤代碼是2755. 參數是:1622,MyInstaller.msi,

行動結束11:26:30:ExecuteAction。返回值3. 操作11:26:30:FatalError。 行動開始11:26:30:致命錯誤。 行動11:26:30:致命錯誤。創建對話框 操作結束11:26:31:FatalError。返回值2. 行動結束11:26:31:安裝。返回值3

Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", true); 

INetFwMgr fwMgr = Activator.CreateInstance(NetFwMgrType) as INetFwMgr; 

bool Firewallenabled = fwMgr.LocalPolicy.CurrentProfile.FirewallEnabled; 

MessageBox.Show("Firewall enabled: " + Firewallenabled.ToString()); 

在我的WiX的XML文件中CA是這樣的:

<CustomAction Id="CheckWindowsFirewallId" 
    BinaryKey="CustomActions.dll" 
    DllEntry="CheckWindowsFirewall" Execute="deferred" Impersonate="no" Return="check"/> 


<InstallExecuteSequence> 
<Custom Action="CheckWindowsFirewallId" After="InstallInitialize">NOT Installed</Custom> 

我使用Visual Studio 2005,Windows XP中,維克斯版本3.6.1321.0

我以管理員身份登錄。

我確切地知道問題中的哪條線。

如果我用「Activator.CreateInstance(NetFwMgrType)」註釋掉該行,則不會發生該錯誤。

我嘗試了幾種不同的'延期'和'模仿'的組合,沒有成功。

如果我不能使用它,我會嘗試使用WiX防火牆擴展,但如果有人知道爲什麼它不起作用,它會很棒。

+1

無論問題的原因是什麼,我仍然建議您嘗試使用WiX Firewall擴展來實現您的目標。它比我們自己的CA測試得更好,我懷疑;-)比起發明你自己的車輪,依靠一些或多或少標準的東西總是更好。祝你好運! – 2011-02-11 12:04:41

回答

0

沒有足夠的信息來確認。然而,我的魔法八球猜測,你試圖激活一個班級的大會是不可用的。最好的辦法是在代碼上獲得調試器並查看異常。如果遇到問題,捕獲異常並將其寫入日誌文件可能也很有用。

我同意上面的評論。我建議在WiX中使用對防火牆的內置支持,而不是在可能的情況下編寫自己的代碼。

相關問題