2017-02-16 8 views
0

У меня есть задача разработать агент обновления, который запускает файл msi после его загрузки, установка должна быть невидимой для пользователя.Запуск установщика MSI в бесшумном режиме из кода

Но у меня есть проблема с запуском без интерфейса. Я пробовал использовать /q и /qn, но он не работает, он работает только с настройками интерфейса.

internal static class MSI_runner 
{ 
    public static bool RunInstallMSI(string sMSIPath) 
    { 
     try 
     { 
      Console.WriteLine("begin"); 
      //Starting to install application 
      Process process = new Process(); 
      process.StartInfo.FileName = "msiexec.exe"; 
      process.StartInfo.Arguments = string.Format(" /q /i \"{0}\" REINSTALLMODE=amus ", sMSIPath); 
      Console.WriteLine("start"); 

      process.Start(); 
      process.WaitForExit(); 
      Console.WriteLine("end"); 

      return true; 
     } 
     catch 
     { 
      // "There was a problem installing the application! 
      return false; //Return False if process ended unsuccessfully 
     } 
    } 
} 

ответ

-1

попробуйте cactch (Exception ex) и посмотрите, что такое ex.message. чек здесь MSIexec Params: http://www.advancedinstaller.com/user-guide/msiexec.html

+0

он не поймает, что это не исключение –

+0

он не поймает, что это не исключение –

+0

вы проверили из cmd, а затем команду, которую нужно запустить, возможно: msiexec не находится в пути или некоторые параметры не являются хорошо, или речь идет о пользовательских настройках. –

0

Наиболее вероятной причиной является то, что установка требует возвышения, так что есть несколько вещей, что это влияет, но есть некоторые догадки здесь, потому что ваш «но это не работает» не очень специфичен.

  1. Когда вы запускаете его в режиме пользовательского интерфейса, он, вероятно, просит возвышения. Администратор просто получит запрос на повышение, ограниченному пользователю будет предложено ввести учетные данные администратора. В любом случае, он работает приподнято. Когда вы запускаете его тихо, подсказка о повышении не отображается (тихий означает «молчание»), и поэтому он терпит неудачу также, потому что для этого требуются повышенные привилегии.

  2. Ваш код почти наверняка по умолчанию имеет значение ProcessStartInfo.UseShellExecute = true, поэтому любые учетные данные процесса не будут использоваться для запуска MSI. В ситуациях, когда MSI нуждается в повышении, и вы хотите установить его тихо, вы должны предоставить exe манифест для повышения (так он подскажет) или запускается каким-то другим способом. Вам также необходимо, чтобы UseShellExecute был ложным, так что запуск представляет собой тип запуска CreateProcess, где права процесса наследуются в процессе запуска. Кроме того, нет никакой реальной необходимости запускать что-либо и заниматься этим типом проблемы. Если ваш процесс повышен, просто вызовите MsiInstallProduct, передавая путь к MSI и командной строке. Тогда вы знаете, что установка выполняется с вашими привилегиями.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370315(v=vs.85).aspx

Предполагая, что ваш код работает, и как в сторону, это не ясно, какой тип обновления вы ожидаете. Там нет никакого упоминания о ли ваш MSI нового ProductCode, ProductVersion и т.д. Обычным способом применения небольшого обновления, переустановка нового MSI с REINSTALLMODE здесь:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367575(v=vs.85).aspx

и REINSTALLMODE должно быть vomus.

 Смежные вопросы

  • Нет связанных вопросов^_^