Как запустить тихий установщик на C #

У меня есть следующий код C #:

string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Process.Start("cmd.exe", "/c" + desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn");

Первая строка содержит путь к моему рабочему столу, на котором находится .exe. Строка desktopPath используется во второй строке.

Вторая строка предполагается запускает установщик в автоматическом режиме, так что процесс выполняется в фоновом режиме, а мастер установки НЕ появляется вообще. Запуск строкового результата desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn" в командной строке работает нормально, а установщик работает в автоматическом режиме. Если кому-то интересно, строковый результат

desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn"

is

C:\Users\ME\Desktop\MyInstaller_7.1.51.14.exe -s -v -qn

и запуск этого в командной строке запускает установку в автоматическом режиме.

К сожалению, запуск той же команды в коде C #, как это:

Process.Start("cmd.exe", "/c" + desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn");

не запускает установщик в автоматическом режиме. Вместо этого появляется мастер, видимый пользователю.

Кто-нибудь знает, как я могу это изменить:

string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Process.Start("cmd.exe", "/c" + desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn");

так что установщик действительно работает в тихом режиме, без отображения пользовательского интерфейса установщика ??

БОКОВОЕ ПРИМЕЧАНИЕ: –s –v –qn - переключатели для работы в тихом режиме.


person Zolt    schedule 17.12.2013    source источник
comment
Попробуйте переместить все флаги перед именем исполняемого файла.   -  person    schedule 17.12.2013
comment
@ Эми, до исполняемого файла, где?   -  person Zolt    schedule 17.12.2013
comment
@ Эми, если ты имеешь в виду, где находится / C, то я уже пробовал это.   -  person Zolt    schedule 17.12.2013
comment
Если вы заключите свою команду в кавычки, это сработает? "/c \"" + desktopPath + "\\" + "MyInstaller_7.1.51.14.exe –s –v –qn\"", так что вы должны получить строку /c "C:\Users\ME\Desktop\MyInstaller_7.1.51.14.exe -s -v -qn" в конце.   -  person Scott Chamberlain    schedule 18.12.2013


Ответы (2)


Попробуйте это, у меня это работает:

ProcessStartInfo psi = new ProcessStartInfo();
psi.Arguments = "–s –v –qn";
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.FileName = "MyInstaller_7.1.51.14.exe";
Process.Start(psi);

Я не знаю, пытались ли предоставленные вами аргументы скрыть окно, но, возможно, в этом случае часть его больше не понадобится.

Обратите внимание, что я использовал «notepad.exe» для своих тестов, которые прошли успешно. Возможно, ваш установщик отреагирует иначе.

person Francis Ducharme    schedule 17.12.2013
comment
Да, к сожалению, окно все еще появляется, когда я пробую ваш код выше. Тем не менее, неплохая попытка. - person Zolt; 18.12.2013
comment
@Zolt - переключатель -s должен означать тихий? - person Francis Ducharme; 18.12.2013
comment
Попробуйте удалить его (-а), возможно, он как-то конфликтует. Если это не сработает, попробуйте закомментировать строку WindowStyle. - person Francis Ducharme; 18.12.2013

Попробуйте запустить установщик напрямую:

string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string installerPath = Path.Combine(desktopPath, "MyInstaller_7.1.51.14.exe");
Process.Start(installerPath, "–s –v –qn");
person Richard Deeming    schedule 17.12.2013
comment
Это хорошая попытка, но пользовательский интерфейс установщика все еще отображается, когда я пытаюсь это сделать. Не знаю почему. Как будто переключатели почему-то игнорируются. - person Zolt; 17.12.2013