相关疑难解决方法(0)

如何部署基于.inf的驱动程序?

我想用我的安装程序部署基于.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)

windows-installer driver

19
推荐指数
1
解决办法
9170
查看次数

带有虚拟COM端口的USB串行设备 - 如果使用带USB路径的CreateFile(),ReadFile()读取零字节

我有一个销售点应用程序,它使用串行通信端口(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)

c++ usb winapi

5
推荐指数
1
解决办法
2979
查看次数

标签 统计

c++ ×1

driver ×1

usb ×1

winapi ×1

windows-installer ×1