Я хочу создать тихую установку msi в c#. Я уже нашел нужную команду в командной строке: msiexec /i c:\temp\Setup1.msi /quiet /qn /norestart /log c:\temp\install.log ALLUSERS=1
. Когда я запускаю эту команду в командной строке с правами администратора, все работает нормально.
Теперь я хочу сделать то же самое в c#. Я уже реализовал файл app.manifest (чтобы пользователь мог открыть программу только с правами администратора): <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
.
Я искал inte rnet несколько дней и пробовал много других вещей - ничего сработало.
Вот несколько попыток:
System.Diagnostics.Process installerProcess;
installerProcess = System.Diagnostics.Process.Start("cmd.exe", @"msiexec /i C:\temp\Setup1.msi /quiet /qn /norestart ALLUSERS=1");
while (installerProcess.HasExited == false)
{
System.Threading.Thread.Sleep(250);
}
или
System.Diagnostics.Process installerProcess;
installerProcess = System.Diagnostics.Process.Start(@"C:\temp\Setup1.msi", "/quiet /qn /norestart ALLUSERS=1");
while (installerProcess.HasExited == false)
{
System.Threading.Thread.Sleep(250);
}
В отчаянии я также создал пакет только со строкой, которая работает в cmd, и пытается выполнить этот пакет в c#, но мне тоже не удалось:
File.WriteAllText(@"C:\temp\Setup1.bat", @"msiexec /i c:\temp\Setup1.msi /quiet /qn /norestart ALLUSERS=1");
ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo();
si.CreateNoWindow = true;
si.FileName = @"C:\temp\Setup1.bat";
si.UseShellExecute = false;
System.Diagnostics.Process.Start(si);
Ничего не работает. Код программы прогоняется без ошибок, ничего не устанавливается. Даже если я включу создание файла журнала в аргументы (/log c:\temp\install.log
), этот файл будет создан, но пуст.
Может ли кто-нибудь мне здесь помочь?
Большое спасибо !!!