在Windows XP或更高版本中,以编程方式从文件夹执行相同的安装驱动程序

我需要在客户的电脑上安装驱动程序。 不幸的是,现在唯一的方法是让Windows在插入设备时显示“硬件更新向导”,然后让用户执行以下操作:

  • select“不,这次”,
  • select“从特定位置安装(高级)”,
  • 选中或取消选中适当的checkbox,然后select包含驱动程序的文件夹

所有这些对于非技术上精明的用户来说是缓慢和不友好的。 对于必须在多台计算机上安装设备的人来说,这也是一个重复和烦人的过程。

所以,我试图写一个非常简单的程序,将提示用户插入设备。 然后该程序将自动执行上述相同的步骤。 我的问题:

  • 我想知道是否有一个Windows API查找文件夹中的驱动程序,因为这是向导所做的。
  • 我刚刚发现了DriverPackageInstall函数。 将作为parameter passing.inf文件做我想要的? (我会写代码来testing这个,同时给我一些时间来下载Windows驱动程序工具包,并build立一个项目…)。
  • 还有其他build议吗?

您没有指定Windows的哪个版本。

在Windows 7上有pnputil:

 c:\>pnputil -? Microsoft PnP Utility Usage: ------ pnputil.exe [-f | -i] [ -? | -a | -d | -e ] <INF name> Examples: pnputil.exe -aa:\usbcam\USBCAM.INF -> Add package specified by USBCAM.INF pnputil.exe -ac:\drivers\*.inf -> Add all packages in c:\drivers\ pnputil.exe -i -aa:\usbcam\USBCAM.INF -> Add and install driver package pnputil.exe -e -> Enumerate all 3rd party packages pnputil.exe -d oem0.inf -> Delete package oem0.inf pnputil.exe -f -d oem0.inf -> Force delete package oem0.inf pnputil.exe -? -> This usage screen 

以编程方式,您可以使用DiInstallDriver

有几种方法,一些取决于你有的设备的类型。

有几个安装驱动程序包的工具。

  1. DpInst是一个完整的应用程序,可以显示一个向导,并定制安装驱动程序包

  2. DifXApp构建了一个可用于安装驱动程序的msi软件包

  3. DifxApi是DpInst和DifxApp用于安装驱动程序的API。

  4. 直接使用SetupApi函数。

    这里函数SetupCopyOEMInf和UpdateDriverForPlugAndPlayDevices为驱动程序设置提供相应的入口点。 这些包含在WinSDK中。

DpInst / DifxApp / DifxApi是Windows驱动程序工具包(WDK)的一部分。

DifX(在Windows DDK中找到)是Microsoft推荐的安装驱动程序的方式。 DPInst是独立工具,DifX API是编程方式。

如果驱动程序已签名,则可以使用DPInst(或DifX API)进行预安装,并在用户插入硬件后立即安装(无需任何向导或提示)。

如果驱动程序是无符号的(即没有签名的.cat文件),那么:

  • 在Windows Vista和更高版本上,您可以自己签名(通常使用您从CA购买的证书,但可能是自签名的)
  • 在Windows XP上,你注定了(除非你应用一些真正的丑陋的黑客)