msi 不会使用 processStart 执行

本文关键字:processStart 执行 msi | 更新日期: 2023-09-27 18:31:55

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

msi 不会使用 processStart 执行

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

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

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

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

  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''");

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