如果pscript5.dll不在根驱动程序文件夹中,AddPrinterDriverEx将失败

时间:2013-08-13 23:10:08

标签: driver wdk

我有一些代码来安装带有端口监视器的基于后脚本的虚拟打印机(用于打印到PDF)。该代码在x86和x64平台上从WinXP到Win7正常工作,除非PScript5文件集不在“root”驱动程序文件夹中。在我的一些测试PC上,文件已经存在,但在较新的Win7 PC上,我的文件还没有存在。

例如,因为我知道上面的内容很清楚,在Windows XP 32位上,如果是这些文件:

ps5ui.dll
pscript5.dll
pscript.hlp
pscript.ntf

位于c:\ windows \ system32 \ spool \ drivers \ w32x86 \,然后我的代码正常工作。如果不是,我的代码就失败了。这些文件始终位于c:\ windows \ system32 \ spool \ drivers \ w32x86 \ 3 \中,结果相同(显然Windows不在“3”子文件夹中查找)。

我是否需要从3个子文件夹中复制它们 - 这是其他人正在做的吗?由于某种原因,似乎不是“良好做法”。根据{{​​3}},我可以重新分发文件,但我需要联系微软我想,我无法弄清楚如何做到这一点(链接很奇怪,典型)。

这是我(已清理)的代码,因为它在Win7 64位上运行(32位只使用“Windows NT x86”而不是“Windows x64”):

   DRIVER_INFO_3 di;
   memset(&di,0,sizeof(di));
   di.cVersion = 3;
   di.pName = "My PDF Printer";
   di.pEnvironment = "Windows x64";
   di.pDriverPath = "pscript5.dll";
   di.pDataFile = "mypdf.ppd";
   di.pConfigFile = "ps5ui.dll";
   di.pHelpFile = "pscript.hlp";
   di.pDependentFiles = "pscript.ntf\0\0";
   di.pMonitorName = NULL;
   di.pDefaultDataType = "RAW";
   if(!AddPrinterDriverEx(NULL,3,(BYTE*)&di,APD_COPY_ALL_FILES|APD_INSTALL_WARNED_DRIVER))
      {
      char err[1024];
      sprintf(err,"Error adding printer driver: 0x%08X",GetLastError());
      Prompt(err);
      return;
      }
如果以上任何文件不在根文件夹中,则

AddPrinterDriverEx失败,错误代码为2,找不到文件。如果我从“3”子文件夹复制文件,然后再次运行确切的代码,它的工作原理。我已经尝试过没有APD_COPY_ALL_FILES标志,同样的错误(2)如果没有找到文件,还有一些其他错误,如果它们在那里(我假设错误代码意味着文件已经存在,无论如何都不重要,因为无论如何都与真正的问题无关)。

2 个答案:

答案 0 :(得分:2)

您无需与Microsoft联系;你可以自由地重新发布PScript5文件。但是,要使用AddPrinterDriverEx,您必须确保所有必需的文件都在\windows\system32\spool\drivers\w32x86文件夹中,并且您不应该假设它们将位于要复制的\windows\system32\spool\drivers\w32x86\3文件夹中。您应该使用安装程序提供它们的副本,并在致电AddPrinterDriverEx之前将其复制到那里。

答案 1 :(得分:0)

您确定可以自由地重新发布pscript5文件吗?

根据Xeros的this文章,您必须要求Microsoft重新分发它们:

  

施乐等其他制造商可以获得再分配权   对于此文件,然后可以将此DLL与其软件合并   Microsoft操作系统的应用程序和打印驱动程序。