从Visual Studio安装项目

时间:2016-10-12 08:31:52

标签: vb.net driver visual-studio-2015 visual-studio-setup

所以..我们有一个用于USB /串行设备的C#实用程序。我想在安装过程中安装驱动程序。我知道有很多关于这个的帖子,我已经阅读了很多msdn和stackoverflow文章,但我似乎没有成功。

驱动程序没问题,它是一个股票Arduino驱动程序,所以它已签名,可以从windows gui安装(右键单击inf,安装) 我为applcation创建了一个visual studio安装项目,并为自定义安装操作创建了一个VB项目。安装程序将驱动程序复制到安装文件夹。驱动程序安装是从“OnCommitted”方法执行的。在这里,我通过调用cmd.exe生成一个进程,并希望调用一些命令来安装驱动程序。

首先我尝试了“RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132”,但它总是失败,尽管我获得了管理权限。 我试图在不同的地方获得管理员权限: - 我尝试添加条件为“AdminUser”的“启动条件” - 我试图从VB运行cmd作为管理员(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

0 个答案:

没有答案