我有一些代码来安装带有端口监视器的基于后脚本的虚拟打印机(用于打印到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)如果没有找到文件,还有一些其他错误,如果它们在那里(我假设错误代码意味着文件已经存在,无论如何都不重要,因为无论如何都与真正的问题无关)。
答案 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操作系统的应用程序和打印驱动程序。