在进程内调用MSIEXEC失败

时间:2010-08-24 04:19:02

标签: .net msiexec

我有以下服务代码来安装复制到给定目录的一组MSI文件:

    private void InvokeInstallersIn(string path)
    {
        var di = new DirectoryInfo(path);
        foreach (FileInfo fileInfo in di.GetFiles("*.msi"))
        {
            try
            {
                ProcessStartInfo start = new ProcessStartInfo();
                start.FileName = @"msiexec.exe"; // Specify exe name.
                start.UseShellExecute = true;
                start.RedirectStandardOutput = false;
                start.WorkingDirectory = path;
                var arguments = @"/I /l*v install.log /qn " + 
                    fileInfo.Name + " REINSTALL=All REINSTALLMODE=amus";
                start.Arguments = arguments;
                Logger.Info("Process: msiexec.exe {0}", arguments);
                Process process = Process.Start(start);
                process.WaitForExit(30000);
            }
            catch (System.Exception e)
            {
                Logger.ErrorEx(e, "Error installing '{0}'", fileInfo.Name);
            }
        }
    }

每当调用msiexec时,它都会显示使用对话框,而不是执行安装。

更新

我可以通过Windows资源管理器安装MSI,但根本无法从命令行安装。另外,我无法更改msi文件上的文件权限,并且当我通过资源管理器调用时,安装程​​序会显示“此文件没有有效的数字签名... ”警告。 (我已将此文件复制到我自己的计算机上的共享中,并通过\ localhost \ MyShare在资源管理器中访问它。也许现在的问题是 - 如何选择从命令行覆盖此警告

关于我哪里出错的任何线索?

2 个答案:

答案 0 :(得分:1)

MSI名称属于/ I,

之后
string.format(@"/I {0} /l*v install.log /qnx REINSTALL=All REINSTALLMODE=amus", fileInfo.Name);

至于警告,AFAIK你不能覆盖它,但如果你用有效证书对MSI进行数字签名,它就会消失。

答案 1 :(得分:0)

尝试从提升的权限shell运行MSIExec。

相关问题