msi不会使用processStart执行

时间:2013-09-18 19:18:29

标签: c# process msiexec

从c#代码运行安装程序我可以成功安装.exe文件并卸载exe和msi文件......但是每当启动一个msi进行安装时它只是坐在那里,从不做任何事情......

start = new ProcessStartInfo("msiexec.exe", "/i \"" + tempDir + "/" + s.executable + "\"");
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
Process.Start(start).WaitForExit();

任何人都可以发现我的错误。我知道等待退出将无休止地等待,这很好,因为将有10-12个安装同步,但它从未实际安装.....

2 个答案:

答案 0 :(得分:1)

我看了一下msiexec.exe文件。它似乎只适用于* .msi文件。我用msi文件尝试了你的代码,效果很好。

您的代码存在小问题。目录路径应该是相反的方式。

start = new ProcessStartInfo("msiexec.exe", "/i \"" + tempDir + "\\" + s.executable + "\"")

答案 1 :(得分:0)

您必须在几个问题上调整命令行才能达到最佳效果,并且主要是为了支持。

  1. 请勿在此处使用ProcessWindowStyle.Hidden选项。你不需要。 只要您正在测试,请使用“/ qb”参数。 要发布,如果您不想要对话,请使用“/ qn”
  2. 我认为使用not / qn但禁止打开窗口可能是问题的根源。

    1. 确保您的程序已经启动了管理员权限,否则您将在Vista,Win7 ff下遇到更复杂的UAC情况。并且你真的需要对话框以允许UAC对话框。如果您的程序已经启动了管理员权限,您可以使用“/ qn”并进行其他简化的方案,我建议初学者使用MSI。

    2. 使用记录。

    3. 在Windows中使用反斜杠更安全,但有时也可能使用斜杠。 =>我建议像这样生成一个命令行。

      string msicmd; msicmd =“msiexec.exe / i \”“+ tempDir + @”\“+ msifile + @”\“/ qb / L * v \”tempDir \ mylogfile \“”);

      //显示此命令行的跟踪以便在出现错误时对其进行调试: - )

    4. ...