我有一些代码来安装基于后置脚本的虚拟打印机和端口监视器(用于打印到 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),如果存在其他错误(我假设错误代码表示文件已经存在,无论如何与实际问题无关) )。