4

WiXでMSIインストーラーを作成しています。インストール中に、カスタムアクションから実行可能ファイルを実行し、後でインストール中に使用するためにその標準出力(リターンコードではない)を取得したいと思います(Propertyおそらく要素を使用)。

WiX(3.5)でどうすればそれを達成できますか?

4

2 に答える 2

4

私はこのコードを同様のタスク(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();
于 2012-08-23T14:45:25.020 に答える
3

これは「スクリーンスクレイピング」と呼ばれ、EXEをプロセス外で実行するインフラストラクチャを作成し、その出力をスクレイピングしてからデータをMSIコンテキストにマーシャリングすることは技術的に可能ですが、堅牢なソリューションになることはありません。

より良い解決策は、EXEが何を実行し、どのように実行するかを理解することです。次に、MSIハンドルにアクセスしてインプロセスで実行されるC#o C ++カスタムアクションを記述します。これにより、作業を実行し、設定する必要のあるプロパティを設定できます。

于 2012-08-23T15:35:19.730 に答える