各位高手,
   在做打印机驱动安装时遇到一个问题,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.   

     手动通过inf安装是成功的
      

  2.   

    可参考如下论坛回复:
    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应该是少了第一步的原因。
      

  3.   

    Hi man,as for the existed port, we don't need to add port, such as LPT1.Actually, I used "LPT1:" for my installtation.In Chinese:
    对于存在的端口,我们无需调用AddPortEx,去添加端口。比如“LPT1”。
    我这个安装包程序,正是用的 "LPT1:"anyway,还是非常感谢你的参与回答。
    还有高手么? 给分析一下~
      

  4.   

     to fishion,
     控制面版中,打印机中安装生成打印机,就是通过指定inf安装的 。 这个是成功的。
      

  5.   

    我也有类似的问题,不过我返回的错误是1796,应该是processor不识别的问题,纠结,同求高手解答