我想启动一个位于网络共享上的 MSI,但是却显示 msiexec“帮助”对话框(这表明进程启动信息有问题):
string testPath1 = @"\\mynetwork.share.com\dev\builds 1.0\product.msi"; //DOESN'T WORK
string testPath2 = @"C:\users\username\desktop\product.msi"; //DOES WORK
ProcessStartInfo startMsiexecProcess = new ProcessStartInfo(@"C:\windows\system32\msiexec.exe");
startMsiexecProcess.Arguments = @"/i " + testPath1;
Process.Start(startMsiexecProcess);
我尝试过 testPath1 的变体 - 即不使用完全限定名称和其他网络共享。我也尝试过调整参数的间距。
最后,如果我将“本地”路径更改为完全合格的格式,如下所示:
string testPath2 = @"\\mylocalmachine.domain.com\c$\users\username\desktop\product.msi";
..它确实能正常工作。因此,当我尝试在网络共享上执行此操作时,我相信问题可能不是由格式错误的字符串引起的。
可以从网络共享运行 msi 吗?
答案1
它是我的路径中的空格:“builds 1.0”。Process.Start 可能将其解释为参数分隔符。
为了解决这个问题,我在正在运行的 MSI 路径周围添加了引号,即:
"\"" + testPath1 + "\""
这篇文章让我找到了解决方案:如何在 C-Sharp 中处理进程启动时带有空格的值