1

我是打印机制造商的软件开发人员。最近问了一个司机。所以我开始挖掘教程、示例、文章。

首先,我下载了 Windows Driver Kit 7600.16385.1。我安装它,用一些示例驱动程序构建它(例如,仅通用/文本)。我更改了 inf 文件中的制造商部分并且工作正常。但我要求做更具体的驱动程序,从任何可以打印的应用程序中获取数据并将其发送到我们的打印机。

在这一点上,我做了一些额外的挖掘,安装了 Visual Studio 2013 和 winddk 8.1。我尝试了开箱即用的 v4 打印机驱动程序示例。我设法构建了它(Inf to cat 表现得很奇怪,所以我禁用了它的项目属性)。然后我尝试安装带有新驱动程序的打印机。根本没有安装驱动软件。我通过了 inf 语法,发现了一些错误并解决了问题。之后我不断收到 0x00000002 错误。我设法解决了问题,然后出现 0x0000003 错误。

所以,我写了一个 inf intaller c# 项目,设法安装驱动程序。驱动程序出现在打印机驱动程序部分,但我尝试安装新打印机,安装不断失败,错误 0x0000003。我做了一些关于错误的搜索,我发现它是 path_not_found 错误。我检查了我的 inf 文件,进行了一些语法检查。我在那里付出了一些努力,但我不断收到错误0x0000003。

我做什么来解决问题?

  1. 在论坛中,人们说这是导致 Windows 凭据中出现此错误的特权问题。我设置了新的管理员帐户并安装了驱动程序。但是当尝试设置时,打印机错误是相同的。

  2. 我调查 windows 文件夹下的 windows 日志:setupapi.dev.log 和 setupact.log。在本节中,我发现 0x0000002 错误,但未找到 0x000003 错误。这对我没有帮助。

  3. 论坛里有人说可能是预装的驱动程序和打印机导致了问题。我卸载了 system32 driverstore 下的驱动程序和打印机。还要卸载控制面板下的打印机服务和打印机部分。结果是一样的。

  4. 我找到了channel9,它是某种微软开发网络。我找到了一些关于开发的视频教程和幻灯片。我看了 HW-328T、HW-238T、HW-979P、HW-981P、HW-903T、HW-322T。这个视频给了我一些见解,但仅此而已。

  5. 所以我一直在挖掘问题,使用windows的eventwiever工具。发现 HRESULT 0x80070003 错误。这是一个打印机后台处理程序错误日志说。我重新启动后台处理程序,错误继续,我重新启动服务并重新启动计算机,错误继续。

  6. 我尝试了我的驱动程序注册表编辑器的旧条目。结果是一样的。我设法获得了 windows 文件夹的管理员权限,但这并没有什么不同。

  7. 我尝试使用带有管理员权限的命令行安装新打印机,结果是一样的。

  8. 在 64 位和 32 位 Windows 上安装的许多尝试。

  9. 我也尝试使用 GPD、PPD 类型。

我的代码示例

  1. 信息文件

    [Version]
    Signature="$Windows NT$"
    Class=Printer
    ClassGuid={4D36E979-E325-11CE-BFC1-08002BE10318}
    Provider=%ManufacturerName%
    CatalogFile=Ali.cat
    ClassVer=4.0
    DriverVer=08/01/2012,1.0.0.0
    
    [DestinationDirs]
    DefaultDestDir = 66000
    
    
    
    [Manufacturer]
    %ManufacturerName%=Ali,NTia64,NTamd64
    
    [Ali]
    "Ali V1" = Ali.GPD
    
    [Ali.NTia64]
    "Ali V1" = Ali.GPD
    
    [Ali.NTamd64]
    "Ali V1" = Ali.GPD
    
    [SourceDisksNames.amd64]
    1= %DiskName%,,,
    
    [SourceDisksFiles.amd64]
    Ali.gpd = 1
    
    [SourceDisksNames.ia64]
    1= %DiskName%,,,
    
    [SourceDisksFiles.ia64]
    Ali.gpd = 1
    
    [Strings]
    ManufacturerName="Ali"
    DiskName="Ali Installation Disk"
    
  2. 我的用于安装 inf 文件的 C# 函数代码

    if (SetupCopyOEMInf(inf_path, "", 2, 0x0000400, null, 0, 0, null))
    

提前致谢。

注意:如果需要,我也可以发布 gpd 文件。

4

2 回答 2

1

看起来您在 INF 文件中没有应该类似于以下内容的复制部分:

[Ali.GPD]
CopyFiles=@Ali.gpd

Inf 文件要求它知道要复制哪些文件。这是有关此主题的相关 MSDN 文档

希望这可以帮助。

于 2015-05-08T09:01:04.427 回答
0

首先,您必须考虑您的处理器架构。由于相关部分未包含在您的示例 .inf 文件中,因此您的驱动程序绝对不能在基于 x86 或 ARM 的体系结构上运行。

此外,您的 .inf 文件中没有安装部分(复制文件指令),因为必须包含(特别是如果您打算使用基于 INF 的设置 API)。要创建最小的工作 .inf 文件,请参见此处

最后,如何安装打印机驱动程序?您使用驱动程序包吗?如果是,当您提到您的工作中绕过了 inf2cat 进程时,您是如何签名的?(可能你正在“禁用驱动程序签名强制”模式下开发!)。否则,如果没有任何 .gpd 或 .ppt 文件,您将如何安装打印机?您对打印机有什么期望?

通过添加一些代码片段,可能人们可以提供更多帮助。

于 2018-12-11T15:07:07.847 回答