Сбой установки при запуске с использованием Process.Start (), но работает при двойном щелчке - PullRequest
3 голосов
/ 08 марта 2011

У меня проблемы с System.Diagnostics.Process.Start().

Когда я запускаю сторонний установщик (пакет MSI, завернутый в исполняемый файл), он устанавливается без проблем, когда запускается двойным щелчком поexe или вызывается из командной строки.

Однако, когда я запускаю его из приложения с помощью Process.Start(), программа установки завершается ошибкой с кодом ошибки 5 = доступ запрещен.В журналах говорится, что он не работает, потому что он не может восстановить некоторые параметры реестра.

Кто-нибудь знает разницу (в плане безопасности) между двойным щелчком по exe и запуском процесса из приложения?Пользователь работает как администратор.

Пример кода:

var info = new ProcessStartInfo();
info.FileName = @"C:\MyFolder\setup.exe";
info.UseShellExecute = false; // I have tried both true and false here

Process p = Process.Start(info);
p.WaitForExit();

if (p.ExitCode != 0)
{
    // Do something...
}

ОБНОВЛЕНИЕ:

Я поместил код выше в небольшом консольном приложении, и он работал,Очевидно, что в основном приложении происходило что-то подозрительное ...

Оказалось, я забыл закрыть некоторые ключи реестра.Сбой установки, так как он пытался получить доступ к тем же ключам.Как только я правильно закрыл ключи, код заработал.

Извините, ребята.Позор мне.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2011

Вы пытались установить info.Verb = "runas"?

Это заставит приложение / установщик работать от имени администратора. Это то же самое, что щелкнуть правой кнопкой мыши по значку и сказать, что он запускается от имени администратора

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

Так что это может не сработать так, как вы ожидаете; Я предполагаю, что вы собираетесь для автоматической установки. Попробуйте что-то вроде этого:

Process installer = new Process()
installer.StartInfo.FileName = @"C:\MyFolder\Setup.exe";
installer.StartInfo.Arguments = " /s /v\" /qn\"";
installer.Start()
installer.WaitForExit();

if ( installer.ExitCode != 0 )
{
   //do something
}

Аргумент говорит программе установки exe работать тихо (/ s) и передавать аргументы в MSI (/ v). Параметр / qn - это аргумент установщика Windows, который запускает установщик в режиме без вывода сообщений, что не требует вмешательства пользователя и должно обеспечивать правильную работу установщика.

...