#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-файл установит драйвер без проблем.