0

我有一些代码来安装基于后置脚本的虚拟打印机和端口监视器(用于打印到 PDF)。该代码在从 WinXP 到 Win7 的 x86 和 x64 平台上运行良好,除非 PScript5 文件集不在“根”驱动程序文件夹中。在我的一些测试 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 子文件夹中复制它们——这是其他人正在做的吗?出于某种原因,这似乎不是“好习惯”。根据MSDN 上的这个,我也许可以重新分发文件,但我想我需要联系微软,我不知道该怎么做(链接很奇怪,很典型)。

这是我的(清理后的)代码,因为它在 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),如果存在其他错误(我假设错误代码表示文件已经存在,无论如何与实际问题无关) )。

4

2 回答 2

2

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

于 2013-10-07T22:24:16.110 回答
0

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

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

其他制造商(例如 Xerox)可以获得此文件的再分发权,然后可以将此 DLL 与他们的软件应用程序和 Microsoft 操作系统的打印驱动程序合并。

于 2016-10-10T16:07:34.160 回答