我已經在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防火牆擴展,但如果有人知道爲什麼它不起作用,它會很棒。
無論問題的原因是什麼,我仍然建議您嘗試使用WiX Firewall擴展來實現您的目標。它比我們自己的CA測試得更好,我懷疑;-)比起發明你自己的車輪,依靠一些或多或少標準的東西總是更好。祝你好運! – 2011-02-11 12:04:41