在后台以编程方式安装软件

时间:2015-06-08 11:47:39

标签: c#

我试图制作一个帮助我在其他PC上安装软件的应用程序,我使用的是这段代码,但不幸的是不能正常工作:

                string filename = "Java\\jre-6u24-windows-i586.exe";

            Process p = new Process();
            p.StartInfo.FileName = "msiexec.exe";
            p.StartInfo.Arguments = "/i \"" + filename + "\" /qn";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.Start();

            string output = p.StandardOutput.ReadToEnd();

            p.WaitForExit();

            if (p.ExitCode != 0)
            {
                MessageBox.Show("ERROR: " + output);
            }
  

错误:T

2 个答案:

答案 0 :(得分:1)

msiexec.exe 是安装 * .msi-Files!
您的re-6u24-windows-i586.exe是独立的可执行文件 哪个必须分配给p.StartInfo.FileName属性!

p.StartInfo.Arguments必须包含此特定安装程序的args! /qn 是MSI包的参数!

答案 1 :(得分:0)

要找出问题所在,您需要获得流程的输出:

string filename ="Java\\jre-6u24-windows-i586.exe";

Process p = new Process();
p.StartInfo.FileName = "msiexec.exe"; 
p.StartInfo.Arguments = "/i \""+filename+"\" /qn";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();

string output = p.StandardOutput.ReadToEnd();

p.WaitForExit();

if(p.ExitCode != 0)
{
   MessageBox.Show("ERROR: " + output);
}

您收到的错误代码意味着

  

ERROR_INSTALL_PACKAGE_INVALID(1620)此安装包不可能   打开。请与应用程序供应商联系以验证这是否是有效的Windows   安装程序包。

所以我猜这不是一个msi包。也许你需要直接调用exe,而不使用msiexec?