вызов MSIEXEC в процессе не удается - PullRequest
2 голосов
/ 24 августа 2010

У меня есть следующий фрагмент служебного кода для установки группы файлов 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, он отображает диалоговое окно использования вместо выполнения установки.

Обновление

Я могу установить MSI через проводник Windows, но не могу из командной строки вообще.Кроме того, я не могу изменить права доступа к файлу msi, и установщик отображает предупреждение « Этот файл не имеет действительной цифровой подписи ... » при вызове через проводник.(Я скопировал этот файл в общую папку на своем компьютере, и я обращаюсь к нему в проводнике через \ localhost \ MyShare).Возможно, вопрос сейчас - как мне выбрать переопределить это предупреждение из командной строки .

Есть какие-нибудь подсказки относительно того, где я иду не так?

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Имя MSI принадлежит сразу после / I, , т.е.

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

Что касается предупреждения, AFAIK, вы не можете переопределить его, но оно исчезнет, ​​если вы подпишете MSI с действительным сертификатом.

0 голосов
/ 15 марта 2011

Попробуйте запустить MSIExec из оболочки с повышенными привилегиями.

...