相当于在Windows XP或更高版本中以编程方式从文件夹安装驱动程序

时间:2011-03-10 20:14:20

标签: windows device-driver drivers

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

  • 选择“不,不是这次”,
  • 选择“从特定位置安装(高级)”,
  • 选中或取消选中相应的复选框,然后选择包含驱动程序的文件夹

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

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

  • 我想知道是否有Windows API在文件夹中查找驱动程序,因为这就是向导所做的事情。
  • 我刚刚发现了函数DriverPackageInstall。将.inf文件作为参数传递给我想要的是什么? (我将编写代码来同时测试它,只需给我一些时间下载Windows驱动程序工具包并设置项目......)。
  • 还有其他建议吗?

3 个答案:

答案 0 :(得分:5)

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

在Windows 7上有pnputil:

c:\>pnputil -?
Microsoft PnP Utility
Usage:
------
pnputil.exe [-f | -i] [ -? | -a | -d | -e ] <INF name>
Examples:
pnputil.exe -a a:\usbcam\USBCAM.INF      -> Add package specified by USBCAM.INF
pnputil.exe -a c:\drivers\*.inf          -> Add all packages in c:\drivers\
pnputil.exe -i -a a:\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 :(得分:4)

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

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

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

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

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

  4. 直接使用SetupApi功能。

    此处函数SetupCopyOEMInfUpdateDriverForPlugAndPlayDevices为驱动程序设置提供了相应的入口点。这些包含在WinSDK中。

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

答案 2 :(得分:1)

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

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

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

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