![无法使用 Process.Start 从网络路径运行 MSI - 是否可以从网络共享运行 msi?](https://linux22.com/image/1355908/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20Process.Start%20%E4%BB%8E%E7%BD%91%E7%BB%9C%E8%B7%AF%E5%BE%84%E8%BF%90%E8%A1%8C%20MSI%20-%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BB%8E%E7%BD%91%E7%BB%9C%E5%85%B1%E4%BA%AB%E8%BF%90%E8%A1%8C%20msi%EF%BC%9F.png)
我想启动一个位于网络共享上的 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 中处理进程启动时带有空格的值