WiXでMSIインストーラーを作成しています。インストール中に、カスタムアクションから実行可能ファイルを実行し、後でインストール中に使用するためにその標準出力(リターンコードではない)を取得したいと思います(Property
おそらく要素を使用)。
WiX(3.5)でどうすればそれを達成できますか?
WiXでMSIインストーラーを作成しています。インストール中に、カスタムアクションから実行可能ファイルを実行し、後でインストール中に使用するためにその標準出力(リターンコードではない)を取得したいと思います(Property
おそらく要素を使用)。
WiX(3.5)でどうすればそれを達成できますか?
私はこのコードを同様のタスク(C#DTFカスタムアクション)に使用しました:
// your process data
ProcessStartInfo processInfo = new ProcessStartInfo() {
CreateNoWindow = true,
LoadUserProfile = true,
UseShellExecute = false,
RedirectStandardOutput = true,
StandardOutputEncoding = Encoding.UTF8,
...
};
Process process = new Process();
process.StartInfo = processInfo;
process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
{
if (!string.IsNullOrEmpty(e.Data) && session != null)
{
// HERE GOES THE TRICK!
Record record = new Record(1);
record.SetString(1, e.Data);
session.Message(InstallMessage.ActionData, record);
}
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
if (process.ExitCode != 0) {
throw new Exception("Execution failed (" + processInfo.FileName + " " + processInfo.Arguments + "). Code: " + process.ExitCode);
}
process.Close();
これは「スクリーンスクレイピング」と呼ばれ、EXEをプロセス外で実行するインフラストラクチャを作成し、その出力をスクレイピングしてからデータをMSIコンテキストにマーシャリングすることは技術的に可能ですが、堅牢なソリューションになることはありません。
より良い解決策は、EXEが何を実行し、どのように実行するかを理解することです。次に、MSIハンドルにアクセスしてインプロセスで実行されるC#o C ++カスタムアクションを記述します。これにより、作業を実行し、設定する必要のあるプロパティを設定できます。