WindowsファイアウォールがオンかオフかをチェックするためにC#でWiXカスタムアクションを実装しました。WiXカスタムアクションがファイアウォールの状態をチェックしてインストーラが失敗する
私はC#コンソールアプリケーションでコードをテストしましたが、問題なく動作しました。
私はWiXのカスタムアクションのコードを使用している場合しかし、それはインストーラがmsiexecのエラーログに次のエラーで、実行時に失敗します:
DEBUG:エラー2755:サーバーが予期しないエラーを返しました1622で MyInstaller.msiパッケージをインストールしようとしています。 このパッケージをインストールする際に、インストーラで予期しないエラーが発生しました。 これは、このパッケージの問題を示している可能性があります。エラーコードは2755です。 引数は次のとおりです。1622、MyInstaller.msi、
アクションが終了しました11:26:30:ExecuteAction。戻り値3 アクション11:26:30:FatalError。 アクション開始11:26:30:FatalError。 アクション11:26:30:FatalError。ダイアログが作成されました アクションが終了しました11:26:31:FatalError。戻り値2 アクションが終了しました11:26:31:INSTALL。戻り値の私のWiX XML 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());
は、CAを提出、このようなものです:私は、Visual Studio 2005、Windows XPでは、WiXのバージョン3.6.1321.0
を使用しています<CustomAction Id="CheckWindowsFirewallId"
BinaryKey="CustomActions.dll"
DllEntry="CheckWindowsFirewall" Execute="deferred" Impersonate="no" Return="check"/>
<InstallExecuteSequence>
<Custom Action="CheckWindowsFirewallId" After="InstallInitialize">NOT Installed</Custom>
admininstratorとしてログインしています。
問題の原因は正確にわかります。
"Activator.CreateInstance(NetFwMgrType)"という行をコメントアウトするとエラーは発生しません。
私は「遅延」と「偽装」のいくつかの組み合わせを試しましたが、成功しませんでした。
私はそれを動作させることができない場合は代わりにWiXファイアウォールエクステンションを試してみましょう、しかし、誰かがそれが動作しない理由がある場合は素晴らしいでしょう。
問題の原因が何であれ、WiX Firewall拡張機能を使用して目標を達成することをお勧めします。あなた自身のCAよりも優れたテストを受けました;-)それは、あなた自身の車輪を発明するよりも、多かれ少なかれ標準に頼るほうがずっと良いです。がんばろう! –