我想用我的安装程序部署基于.inf的USB驱动程序.
我想.inf需要放入%SystemRoot%\inf
,但是还有.cat(我猜是WHQL认证?)和.sys文件.我该怎么办?
编辑:已解决,感谢有用的答案.我能够P/Invoke函数,所以我有一个安装后的操作,它运行以下代码:
namespace DriverPackageInstallAction
{
static class Program
{
[DllImport("DIFXApi.dll", CharSet = CharSet.Unicode)]
public static extern Int32 DriverPackagePreinstall(string DriverPackageInfPath, Int32 Flags);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
DirectoryInfo assemblyDir = new DirectoryInfo(Application.ExecutablePath);
DirectoryInfo installDir = assemblyDir.Parent;
int result = DriverPackagePreinstall(installDir.FullName + @"\Driver\XYZ.inf", 0);
if (result != 0)
MessageBox.Show("Driver installation failed.");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个销售点应用程序,它使用串行通信端口(RS-232)与称重产品的秤进行通信.我现在正致力于直接支持USB设备,而不是使用虚拟串行通信端口,因为它们有一种令人讨厌的移动趋势.
我们发现虽然Windows 7似乎会自动创建虚拟串行通信端口,但其他版本的Windows(如POS Ready 7)可能不会.我们怀疑这是由于POS Ready 7中缺少一个特定的.inf文件,但是有人确认了吗?
我有一个间歇性工作的USB示例应用程序.我遇到了与ReadFile()
Windows API函数进行USB级别通信的问题.我正在使用CreateFile()
指定USB设备路径来获取I/O句柄,然后使用WriteFile()
和ReadFile()
与秤进行通信.该ReadFile()
不会在某些情况下提供数据.
背景资料
我正在使用的特定规模,Brecknell 67xx台秤,使用虚拟串行通信端口直接开箱即用的销售点应用程序.我用USB电缆将秤连接到我的Windows 7 PC,Windows自动安装了驱动程序,在我的情况下创建了一个虚拟串口COM4.然后我配置应用程序通过COM4与规模通信,一切正常.
使用比例的协议是将两个字节的命令"W\r"(大写字母W后跟一个回车符)发送到比例,然后读取一个16字节的响应,其中包含当前的权重和状态有关比例力学的信息,例如In Motion.
我正在学习的示例USB应用程序将成功地提供重量.然后它将停止正常工作,ReadFile()
返回零字节读取的行为.一旦它停止工作,它将继续无法提供数据,ReadFile()
即使我拔下并重新插上USB电缆或重新启动我的电脑.
以前版本的学习应用程序挂起ReadFile()
,当使用Visual Studio完成Break All时,会显示暂停,然后显示一条消息,指示将出现死锁.但是,由于我开始使用SetCommTimeouts()
5000毫秒的超时值,ReadTotalTimeoutConstant
我看到在ReadFile()
返回零字节读取之前一致的5秒暂停.
奇怪的是,如果我然后使用打开虚拟串行通信端口COM4的应用程序,该应用程序工作正常,并且比例报告项目的权重.
然后我可以返回到使用直接USB而不是虚拟串行通信端口的示例应用程序,它将工作良好的报告权重.
但是,如果我然后拔掉USB电缆连接秤与PC电源关闭,然后重新插入USB电缆,示例应用程序不再正常工作,我再次看到暂停超时.
然后我尝试使用原始销售点应用程序,该应用程序依赖于使用虚拟串行端口COM4的串行通信端口,并且该应用程序称重项目就好了.
然后当我重试我的示例应用程序时,它也会报告项目权重.
我的问题.
如果USB设备在插入时创建了一个虚拟串行通信端口,那么是否需要通过在CreateFile()
呼叫中指定通信端口COM4来使用虚拟串行端口?
CreateFile()
如果设备导致Windows生成虚拟通信端口,如何通过USB设备路径使用直接USB串行通信?
是否有某种方法可以指定任何版本的Windows在插入设备时自动为设备创建虚拟串行通信端口?
样本USB应用程序的源代码
我使用Visual Studio 2005的示例USB Windows控制台应用程序的源代码如下,主要位于底部,其中大部分是查找特定USB设备的类,然后允许ReadFile()
和WriteFile()
:
// usb_test_cons.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include …
Run Code Online (Sandbox Code Playgroud)