描述:
各位高手,
在做打印机驱动安装时遇到一个问题,AddPrinterDriver返回1,而且EnumPrinterDrivers也能看到这个驱动,但是AddPrinter总是失败,GetLastError返回1797(The printer driver is unknown.),请问是什么原因,不胜感激。
备注: 手动通过inf安装是成功的。现在是要写一个自动安装打印驱动的程序。
不惜把把代码贴出来,大家一起看看!
void MyAddPrinter ()
{
DRIVER_INFO_4 DriverInfo;
PRINTER_INFO_2 PrinterInfo;
ZEROMEMORY (DriverInfo);
DriverInfo.cVersion = 3;
DriverInfo.pName = _szPrinterDriver;
DriverInfo.pEnvironment = _szEnvironment; // Win32 x86
DriverInfo.pDriverPath = _T("PDUNI.dll");
DriverInfo.pDataFile = _T("printdoc.gpd");
DriverInfo.pConfigFile = _T("unidrvui.dll");
DriverInfo.pHelpFile = _T("unidrv.hlp");
DriverInfo.pDependentFiles = _T("UNIRES.DLL\0PDUI.dll\0PDUNI.dll\0STDNAMES.GPD\0printdoc.gpd\0\0");
DriverInfo.pMonitorName = NULL; // "PJL monitor"
DriverInfo.pDefaultDataType = _szDefaultDataType; // "EMF"
DriverInfo.pszzPreviousNames = _T("\0\0"); // "OldName1\0OldName2\0\0
if (AddPrinterDriver (NULL, 4, (LPBYTE)&DriverInfo)) {
TRACE1("Printer Driver \"%s\" added", _szPrinterDriver);
TraceLn (_T("Printer Driver \"%s\" added"), _szPrinterDriver);
}
else {
LastErrorMessage (_T("Cannot add Printer Driver \"%s\"!"), _szPrinterDriver);
}
ListPrinterDrivers();
ZEROMEMORY (PrinterInfo);
PrinterInfo.pPrinterName = _szPrinterName;
PrinterInfo.pPortName = _szPortName;
PrinterInfo.pDriverName = _szPrinterDriver;
PrinterInfo.pComment = _T("PD Universal Print Solution");
PrinterInfo.pLocation = _T("Anywhere");
PrinterInfo.pPrintProcessor = _szPrintProcessorName;
PrinterInfo.pDatatype = _TEXT("RAW");
if (AddPrinter (NULL, 2, (LPBYTE)&PrinterInfo)) {
TRACE1 ("Printer \"%s\" added", _szPrinterName);
TraceLn (_T("Printer \"%s\" added"), _szPrinterName);
}
else {
LastErrorMessage (_T("Cannot add Printer \"%s\"!"), _szPrinterName);
}
}
解决方案1:
可参考如下论坛回复:
When you manually install a printer via the INF file, the system
performs at least 3 operations:
1. AddPortEx to create a custom/local/network port (note that some
standard ports, like LPT1, don't have to be created)
2. AddPrinterDriverEx to install the printer driver DLL, the printer
driver GUI DLL (custom settings dialog), and possibly some data,
configuration and help files as well.
3. AddPrinter
应该是少了第一步的原因。
你手动能添加打印机吗