0

我们有一个 USB 设备和驱动程序(.inf、libusb.dll、libusb.sys),可以使用 Windows 的设备安装向导(通过指向 .inf 文件)安装它。但是,我们需要在不使用向导的情况下安装驱动程序(被动地,因此用户不需要做任何事情)。有谁知道如何做到这一点?

4

2 回答 2

2

您添加了“安装程序”标签,所以我假设您正在谈论某种安装包,例如 Windows Installer、InstallShield InstallScript 等。

如果是这种情况,您可能应该使用 Microsoft 的DIFx 框架

DIFx 使您可以更轻松地创建高质量的驱动程序包,自定义驱动程序包的安装,允许结合应用软件安装驱动程序包,并使用标准的 Windows API 和安装工具。DIFx 还使最终用户更容易诊断设备和驱动程序问题。最终用户可以确信,如有必要,可以卸载或回滚驱动程序。

我在基于 Windows Installer 的安装和 InstallScript 安装中都使用了 DIFx。非常用户友好,易于调试且有效。

于 2010-05-05T21:47:36.480 回答
1

我的同事想出了一个非常有效的答案。看来,除非您的硬件/驱动程序组合是 WHQL 签名的,否则添加新硬件向导将始终出现在 Win XP 中。但是,通过以下方法,可以让向导中的“搜索”按钮自动找到您的驱动程序。在 Windows 7 中,没有提示,设备安装正常。不过,您需要注意 64 位机器,因为它们具有更严格的签名执行。

因此,这是整个文档的相关摘录:

使用 DIFxAPI 合并模块。(阅读有关 Windows 中驱动程序、INF 文件的使用和 DIFxAPP 的良好介绍。) DIFxAPI 合并模块包含在 WDK 中的“WDDK//redist\DIFx\DIFxApp\MergeModule\”目录中。合并模块可以包含在 MSI 包中,并且可以设置为安装多个设备驱动程序。以下是使用 DIFxAPP 合并模块创建 MSI 的步骤:

  1. 在 setup 文件夹中,在 Application Folder 中为驱动程序包创建一个单独的目录,并将驱动程序文件添加到该文件夹​​中。
  2. 将 DIFxApp.msm 添加到安装项目。
  3. 构建设置
  4. 使用 Orca 编辑 MSI 数据库表并将 INF 组件添加到 DIFxAPP 合并模块表。

    1. Orca 安装包含在“C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin”目录中的 Windows SDK 中。(Windows SDK 可以从微软下载
    2. 运行 Orca 并选择需要修改的 MSI 包。
      • 阅读第 5 部分了解自动化。
    3. 在“文件”表中,找到您要安装的驱动程序包的 INF 文件并复制组件值。
    4. 在 MsiDriverPackages 表中创建一个新行。将组件值添加到组件字段中。可以使用以下标志(尽管 Windows 7 忽略了一些标志):

      • 0 - 未设置(默认)
      • 1 – 强制安装驱动程序,即使当前安装的驱动程序比正在安装的驱动程序更匹配
      • 2 – 安装驱动程序后禁止提示用户插入设备的消息框。
      • 4 – 禁止在驱动程序的添加/删除程序中添加条目。
        卸载主应用程序时将卸载驱动程序。
      • 8 – 安装未签名的驱动程序包
      • 16 – 在卸载过程中删除驱动程序二进制文件。
    5. 保存 MSI。为了使过程自动化,可以将 MSI 数据库的编辑记录到转换中,然后可以在构建后的过程中应用转换。
      1. 在 Orca 中打开 MSI。
      2. 选择变换->新建变换
      3. 按照上述说明完成步骤 3 和 4。
      4. 选择转换->生成转换并保存转换。
      5. 将以下行添加到安装项目的后期构建 MsiDb.exe -t transform.mst -d $(TargetDir)\DriverInstall.msi 注意:MsiDB.exe 随 Microsoft SDK 提供,位于 C:\Program Files\ Microsoft SDKs\Windows\v7.0\Bin

如果您从 MSI 安装时遇到错误(例如,由于值无效,我收到错误代码 2356 Flag),请使用 Orca 的Validate功能查看是否有任何错误。编辑:修复这些错误仍然没有摆脱错误。我记得读过 inf 文件应该在它们自己的子目录中,但这也没有解决我的问题。

于 2010-05-28T19:50:46.203 回答