完全に無人の約20のインストールをキューに入れる必要があります(C#winformアプリケーションを使用)。各インストールには、(手動で作成された)独自のINIファイルがあり、各インストーラーがこの手順に必要な引数(そのプログラムが実行される前に読み込まれる)に関する適切な情報が含まれています。多くのアプリケーションで問題が発生しています。setup.exeを実行すると、プロセスがすぐに閉じてMSI(該当する場合)が起動し、最初のインストールが完了したと想定して、次のインストールで手順が実行されます。私はWebをスヌーピングする同様の問題を読みましたが、この問題に関する実際の解決策はありません...(MSIが完了するまでsetup.exeをメモリに保持する必要がある/ Waitオプション付きのバッチファイルを使用することを含むいくつかの回避策)。セットアップ。
このジレンマを解決するには、どのようなオプションが必要ですか?
手順を示すサンプルコードを次に示します。
foreach (ListViewItem itm in this.lstSoftwares.Items)
{
try
{
if (itm.Checked)
{
lblStatus.Text = "Status: Installing " + current.ToString() + " of " + count.ToString();
string InstallPath = Path.Combine(Application.StartupPath, "Software",
itm.Text, itm.Tag.ToString());
string CommandLine = itm.SubItems[1].Text;
Process process = new Process();
process.StartInfo.FileName = InstallPath;
process.StartInfo.Arguments = CommandLine;
process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.Start();
process.WaitForExit();
this.lstSoftwares.Items[i].SubItems[2].Text = "Complete";
current++;
}
アップデート
waitforexit()の直後に、msiexecが実行されているかどうかを確認するループを使用しています。
private bool MSIRunning()
{
try
{
using (var mutex = Mutex.OpenExisting(@"Global\_MSIExecute"))
{
return true;
}
}
catch (Exception)
{
return false;
}
}
これは私の意見のハックですが、これまでのところトリックをやっています...