Установите драйвер inf из проекта установки Visual Studio
Итак... У нас есть служебное приложение C# для USB / последовательного устройства. Я хотел бы установить драйвер во время процесса установки. Я знаю, что есть много постов по этому поводу, и я просмотрел много статей о msdn и stackru, но мне, похоже, не удалось.
Драйвер в порядке, это стандартный драйвер Arduino, поэтому он подписан и может быть установлен из Windows GUI (щелкните правой кнопкой мыши на inf, установите). Я создал проект установки Visual Studio для нашего приложения и проект VB для пользовательского настройка действий. Программа установки копирует драйвер в папку установки. Установка драйвера выполняется из метода "OnCommitted". Здесь я порождаю процесс, вызывая cmd.exe и хотел бы вызвать некоторую команду для установки драйвера.
Сначала я попробовал "RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 ", но это всегда не удается, хотя я получаю для этого права администратора. Я пытался получить права администратора в разных местах: - Я пытался добавить "Условие запуска" с условием "AdminUser" - Я пытался запустить cmd как администратор из VB (Process.Startinfo.Verb = "runas"), ни один из выше решил мою проблему. Затем я попробовал альтернативные способы установки драйвера, и InfDefaultInstall.exe почти нормально, но иногда он не работает на некоторых машинах, и я не знаю почему. pnputil.exe всегда терпит неудачу для меня. Я предполагаю, что официальный способ сделать это - вызвать InstallHinfSection, как предлагает MSDN, и я бы предпочел использовать это. Мы должны поддерживать Windows 7 и выше.
Есть мысли о том, что я делаю не так? Заранее спасибо!
Вот мои методы VB:
Private Sub InstallDriverPNPUtil()
Dim infPath As String = """" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\arduino.inf" + """"
Dim processInfo As New ProcessStartInfo("CMD", "/C pnputil -i -a " + infPath)
processInfo.WindowStyle = ProcessWindowStyle.Hidden
Dim p As System.Diagnostics.Process = Process.Start(processInfo)
p.WaitForExit()
End Sub
Private Sub InstallDriverInfDefaultInstall()
Dim infPath As String = """" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\arduino.inf" + """"
Dim processInfo As New ProcessStartInfo("CMD", "/C InfDefaultInstall.exe " + infPath)
processInfo.WindowStyle = ProcessWindowStyle.Hidden
Dim p As System.Diagnostics.Process = Process.Start(processInfo)
p.WaitForExit()
End Sub
Private Sub InstallDriverInstallHinfSection()
Dim infPath As String = """" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\arduino.inf" + """"
Dim process As New Process()
process.StartInfo.FileName = "cmd.exe"
'fails with and without this
process.StartInfo.UseShellExecute = True
process.StartInfo.Verb = "runas"
process.StartInfo.Arguments = "/C RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 " + infPath
'MsgBox(process.StartInfo.Arguments, MsgBoxStyle.OkOnly, "InstallHinfSection")
process.Start()
process.WaitForExit()
End Sub