Сбой установки драйвера MSOLEDBSQL с помощью C#

#c# #windows-installer #oledb

#c# #установщик Windows #oledb

Вопрос:

Мне нужно программно установить драйвер MSOLEDBSQL (файл msi), для которого я написал функцию ниже :

 public static void InstallSQLDriver()  {    string msiPath = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) @"msoledbsql.msi";  string winDir = Environment.GetFolderPath(Environment.SpecialFolder.Windows);  ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(winDir, @"System32msiexec.exe"), $"/i {msiPath} /quiet /qn /norestart ALLUSERS=1");  startInfo.Verb = "runas";  startInfo.UseShellExecute = true;  Process proc = Process.Start(startInfo);  proc.WaitForExit();  Console.WriteLine("process ended with : "   proc.ExitCode);  }  

Это нормально работает на компьютере разработчика и завершается с кодом состояния 0 (успешно), однако, когда я запускаю файл .exe на другой машине, он выдает мне код выхода 1603. Когда я просматриваю журналы eventviewer, я вижу ошибку, в которой говорится, что параметр IACCEPTSQLSERVERLICENSETERMS=ДА отсутствует. Я попытался добавить параметр в переменную StartInfo, как показано ниже :

 ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(winDir, @"System32msiexec.exe"), $"/i {msiPath} /quiet /IAcceptMSOLEDBSQLLicenseTerms/qn /norestart ALLUSERS=1");  

но это не работает, и я получаю код ошибки 1639, в котором говорится, что этот параметр недействителен.

Может ли кто-нибудь, пожалуйста, сказать мне, как включить этот параметр в мою переменную StartInfo?

Комментарии:

1. Возможно, я совершенно не в себе, но разве вам просто не нужно добавить =ДА в свою строку?

2. ой! это сделало свое дело. Спасибо @LaurentGabiot 🙂

3. Хорошо, теперь вы можете написать ответ!

Ответ №1:

Это довольно просто. Значение IAcceptMSOLEDBSQLLicenseTerms должно быть передано как ДА в строке StartInfo. Таким образом, новая переменная StartInfo выглядит следующим образом :

 ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(winDir, @"System32msiexec.exe"), $"/i {msiPath} /quiet IAcceptMSOLEDBSQLLicenseTerms=YES /qn ACCEPTEULA=1 /norestart ALLUSERS=1");  

Как только это будет установлено, exe-файл установит драйвер без проблем.