我需要排队大约 20 个完全无人值守的安装(使用 C# winform 应用程序)。每个安装都有自己的 INI 文件(手动创建),其中包含有关每个安装程序为此过程需要哪些参数的正确信息(在执行该程序之前读入)。我遇到了许多应用程序的问题,当执行 setup.exe 时,进程立即关闭并启动其 MSI(如果适用),导致我的程序在下一次安装时执行,假设第一次安装已完成。我在网上阅读过类似的问题,但没有真正解决这个问题......(一些解决方法包括使用带有 /Wait 选项的批处理文件,它应该将 setup.exe 保留在内存中,直到其 MSI 完成)。设置。
我有什么选择来解决这个困境?
以下是一些演示该过程的示例代码:
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;
}
}
这是我的观点中的一个黑客,但到目前为止做的伎俩......