使用带有C#INF文件安装驱动程序的libusb(Install the libusb driver

2019-07-30 14:38发布

我想在Windows安装程序在安装过程中安装第三方驱动程序的libusb。 我创造了这个安装与Visual Studio 2010。

我曾尝试过使用SETUPAPI和DifXAPI命令行安装此驱动程序,但没有任何反应。 我期待有一个窗口弹出,说明它是一个未签名驱动程序,你必须点击确定继续。 我有这个窗口弹出的唯一方法是,如果我用了一个C#控制台应用程序和的P / Invoke调用驱动程序从DifXApi(指向INF文件,它看起来就像是由INF-向导生成的)安装代码,以及需要项目为64(我需要这也为32位安装工作)来构建。 点击OK后司机从来没有安装。

此驱动程序正确安装的唯一方法是,如果我插上通过USB硬件,右键单击未知设备,并浏览到包含驱动程序DLL文件的,SYS文件的文件夹,和INF文件。 如何视窗弄清楚如何安装驱动程序?

INF文件具有驱动部分的32位/ 64位/安腾,但如何知道的Windows安装哪个部分,什么是Windows不同的方式来做,我在命令行?

Answer 1:

我可以用下面的代码,其中安装在32位和64位Windows驱动程序infPath是通向INF文件,以及devices与USB设备相关联的所有设备ID的列表:

[DllImport("setupapi.dll")]
public static extern bool SetupCopyOEMInf(
    string SourceInfFileName,
    string OEMSourceMediaLocation,
    int OEMSourceMediaType,
    int CopyStyle,
    string DestinationInfFileName,
    int DestinationInfFileNameSize,
    int RequiredSize,
    string DestinationInfFileNameComponent
    );

[DllImport("newdev.dll")]
public static extern bool UpdateDriverForPlugAndPlayDevices(
    IntPtr hwndParent,
    string HardwareId,
    string FullInfPath,
    uint InstallFlags,
    bool bRebootRequired
    );

[STAThread]
static void Main() {
  if (SetupCopyOEMInf(infPath, null, 0, 0, null, 0, 0, null)) {
    foreach (string device in devices) {
      UpdateDriverForPlugAndPlayDevices(IntPtr.Zero, device, infPath, 0, false);
    }
  }
}


文章来源: Install the libusb driver using the INF file with C#