1

从 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 次安装同步进行,但它从未真正安装......

4

2 回答 2

1

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

您的代码有一个小问题。目录路径应该是相反的。

start = new ProcessStartInfo("msiexec.exe", "/i \"" + tempDir + "\\" + s.executable + "\"")
于 2013-09-18T19:40:04.310 回答
0

您必须在几个问题上调整命令行以达到最佳状态,并且主要是可支持的。

  1. 不要在这里使用 ProcessWindowStyle.Hidden 选项。你不需要。只要您正在测试,请使用“/qb”参数。对于发布,如果您不想要对话框,只需使用“/qn”

我认为使用不是 /qn 而是禁止打开窗口可能是问题的根源。

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

  2. 使用日志记录。

  3. 在 Windows 中使用反斜杠更安全,尽管斜杠有时也可以使用。=> 我会推荐这样的命令行。

    字符串 msicmd; msicmd="msiexec.exe /i \"" + tempDir + @"\" + msifile + @"\" /qb /L*v \"tempDir\mylogfile\"");

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

...

于 2013-09-21T17:38:59.117 回答