2011-02-11 65 views
0

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ファイアウォールエクステンションを試してみましょう、しかし、誰かがそれが動作しない理由がある場合は素晴らしいでしょう。

+1

問題の原因が何であれ、WiX Firewall拡張機能を使用して目標を達成することをお勧めします。あなた自身のCAよりも優れたテストを受けました;-)それは、あなた自身の車輪を発明するよりも、多かれ少なかれ標準に頼るほうがずっと良いです。がんばろう! –

答えて

0

確かに知るには十分な情報がありません。しかし、私の魔法の8ボールは、あなたがクラスを活性化しようとしているアセンブリが利用できないと推測します。最善の方法は、コード上でデバッガを取得し、例外を調べることです。あなたがそれをするのに問題があるなら、例外を捕まえて、それをログファイルに書き込むことも有用かもしれません。

私も上記のヤンのコメントに同意します。可能であれば、独自のコードを書くのではなく、WiXのファイアウォールの組み込みサポートを使用することをお勧めします。

関連する問題