【问题标题】:System.Process.Start - running msi problemSystem.Process.Start - 运行 msi 问题
【发布时间】:2016-04-20 15:50:54
【问题描述】:

当我尝试在 vb 应用程序中使用 System.Process.Start("test.msi") 运行 msi 时,出现以下错误。

无法打开安装包。联系应用程序供应商...

Msi 文件在双击时工作正常,尝试 System.Process.Start 与文本文件和 exe 文件,它们工作正常,只有 msi 有问题

文件。运行远景。也试过xp但没有运气

谢谢

【问题讨论】:

  • 问题的核心是 MSI 不是可执行文件。您可以双击它们打开,因为所有版本的 Windows 都内置了 MSI 实用程序,并且它知道使用 MSI 实用程序打开 .msi
  • @Samuel,这还不是全部。 .txt 也不是可执行文件,但您可以执行 System.Process.Start("file.txt") 并且它会起作用。我已经更新了我的答案来解释。
  • 你是 100% 正确的。应该研究过:“..因此,文件名不需要代表可执行文件。它可以是扩展名与系统上安装的应用程序相关联的任何文件类型。” -MSDN

标签: vb.net


【解决方案1】:

如果您的 msi 有 setup.exe,请运行它。否则,请使用以下代码:

Process p = new Process();
p.StartInfo.FileName = "msiexec";
p.StartInfo.Arguments = "/i PathToYour.msi";
p.Start();

(来自这里:MSI doesn't run from within C#

需要这样做的原因是,当您执行 System.Process.Start("file.txt") 时,它会起作用,因为它(有点)调用 notepad.exe %1,这将适用于文本文件,但 msiexec %1 不适用于msi,因为 msiexec 有一个必需的参数(选项)。

您可以自己测试,通过在命令行上尝试 msiexec file.msi - 它会给您这个有用的小消息:

【讨论】:

  • nProcess = 新 System.Diagnostics.Process nProcess.StartInfo.FileName = "msiexec" nProcess.StartInfo.Arguments = "/ic:\test.msi" nProcess.Start()
  • @umarali1 如果您在控制台中输入msiexec /i test.msi,这样可以吗?如果不是,错误信息是什么?
  • 无法打开安装包。联系应用程序供应商
  • 这可能意味着微星有问题。你说双击它有效吗?如果您右键单击它并选择安装会发生什么?
  • 产生相同的错误,这发生在所有 msi 文件上,例如尝试了一系列,甚至是来自微软网站的 msi 文件。任何建议。
【解决方案2】:

为帮助查明问题,请尝试从您的代码中运行其他一些 .exe,例如 notepad.exe。

System.Process.Start("notepad.exe")

【讨论】:

    【解决方案3】:

    遇到了同样的问题。问题在于声明 msi 的路径。你需要在它周围加上双引号。

    而不是

    p.StartInfo.Arguments = "/i PathToYour.msi"

    试试

    p.StartInfo.Arguments = "/i ""PathToYour.msi"""
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多