2011-01-12 18 views
1

インストール中にコマンドウィンドウがポップアップするのを防ぐため、WIXの組み込みカスタムアクションCAQuietExecを使用しています。WIX CAQuietExecがコマンドラインを記録しないようにするにはどうすればよいですか?

まず私は、コマンドラインを定義します。

<CustomAction Id="A01" 
     Property="QtExecCmdLine" Value="&quot;MyExe.exe&quot; /password [PASSWORD]" /> 

NB:PASSWORDプロパティが非表示として定義されます。これにより、Windowsインストーラがプロパティ値をログに書き込むことを防止します。

それから私は、埋め込まれたWIX拡張子を呼び出す:

<CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore" /> 

これが正常に動作します。

CAQuietExec: "C:\プログラム ファイル\ MyExe.exe" /パスワードINCLEARTEXT

私は一時フォルダに移動し、MSIを開くとき

しかし、私は次のエントリを参照してくださいログインします

eパスワードはクリアテキストで表示され、非表示にはなりません。

CAQuietExecがクリアテキストでパスワードを記録しないようにするにはどうすればよいですか?

答えて

2

のsrc \のCAで使用することができるとは思わない\ wcautil \ qtexec.cppはQuietExec機能では、この行です:

WcaLog(LOGMSG_VERBOSE, "%ls", wzCommand); 

ましたコマンドラインを冗長モードで記録します。ロギングを停止する条件はありません。

+0

この情報を提供いただき、ありがとうございます。 –

1

CustomActionタグには、カスタムアクションデータがログに書き込まれないようにするHideTarget属性があります。

+0

おかげで、私はすでにことを試してみました - すべての可能なカスタムアクションにこれを追加しました - そしてそれは動作しません。問題は、CAQuietExecのコードがこの属性またはHidden属性を遵守していないことです。 –

1

パスワードを盗む方法はたくさんあります。私はORCAのMSIを見ることができました。実行中にWMICパスwin32_processを実行し、コマンドライン引数を確認することができました。ログからそれを隠すことは、ほとんど価値がないだろう。

私は、MSIに格納されているパスワードを暗号化し、exeで解読できるようにすることをお勧めします。このパスワードが使用されているかどうかに応じて、実行時にEXEがランダムなパスワードを生成し、他のプロセスが取得できる必要がある場合に暗号化/永続化するなどの他の手段を講じることもできます。

パスワードがUI入力のユーザー入力から来た場合は、データを第2のプロパティとして暗号化してEXEに渡すカスタム操作を行うことができます。あるいは、C++のソースコードをQuietExecにフォークして、ログファイルに書き込まないように変更することもできます。

+0

いいえ、私はMSIにパスワードを保存していません - それはばかげているでしょう。それをログに隠すことは、ITプロフェッショナルによってパスワードが入力され、開発者(パスワードを知らない)にMSIログを郵送するため、実際には多くの価値があります。機密アイテムが記録されないようにするために、WIXのユーザーが暗号化などの余分な長さに移動しなければならない隠し属性(HideTarget属性と同様に)が既に存在する理由がわかりません。これはCAQuietExecのバグのようです。 –

+0

hide属性は、WindowsインストーラのmsidbCustomActionTypeHideTarget属性を参照します。 MSIEXECエンジンにCustomActionDataを記録するかどうかを指示します。実際に遅延カスタムアクションの中に入ったら、私はそのフラグを認識するためのメカニズムを認識していません。 QuietExec CAにログに記録されているものに関して何か特別なことを行うかどうかを指示する別のフラグが必要です。私が言ったように、あなたがソースをフォークすると、それは実行でき、あなたがWiXのバグに言及して以来...私はロブがパッチの提出を感謝すると確信しています。 –

1

Preventing Confidential Information from Being Written into the Log Fileの記事、特に3番のポイントをご覧ください。基本的には、プロパティが隠されていてもデバッグポリシーが特別な値に設定されている場合、コマンドラインはクリアテキストでログファイルにダンプされます。これが上記の動作を経験する理由であることを確認してください。

そして、私はそれがQuietExecのCAのバグ:)

+0

チップをありがとうが、デバッグポリシーを設定する(これはレジストリを介して行われます)は効果がありません。私は一緒に行くだろうし、誰にも怒らないように、これをQuietExec CAでバグと呼んではいけない。 –

+0

私はWiXを書いていないので、私は怒られていません、私はちょうどここで何が起こっているのか見知らぬことをしようとしています。これは確かに、QuietCAがログに記録されたものをフィルタリングする機能要求です。あなたがすることができるのは、パッチを当てWcaUtilを再構築するか、あなたの財産を暗号化して、あなたのexeを解読して通過中にそれを保護することです。あなたの問題を解決する方法に関する他のアイデアはありますか? –

2

いくつかのGoogle検索エンジンを使用して、プロポーザルを作成し、値をプロパティに割り当てる前にHidden = "yes"を割り当ててください。上記のコードでは、値を割り当てる前に新しいプロパティQtExecCmdLineを作成する必要があります。

<Property Id="QtExecCmdLine" Hidden="yes"></Property> 

その後

<CustomAction Id="A01" Property="QtExecCmdLine" Value="&quot;MyExe.exe&quot; /password [PASSWORD]" /> 

その後

<CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return ....