2014-09-01 2 views
1

Я пробовал этот код C# для добавления драйверов принтера и принтера в Windows. Он работал на Windows 7, но не на Windows 8. Исключение (общий сбой) произошло, когда код вызывает moPrinter.Put(). Может ли кто-нибудь сказать, почему эта ошибка возникла при работе с Windows 8 и почему не Windows 7?Код для установки драйвера принтера работает в Windows 7, но не в Windows 8

public static bool AddCanonPrinter() 
    { 
     bool flag = true; 
     try 
     { 
      String portNumber = "9100"; 
      String printerIP = "157.198.192.42"; 
      String portName = "IP_" + printerIP; 
      ConnectionOptions options = new ConnectionOptions(); 
      options.EnablePrivileges = true; 
      ManagementScope mscope = new ManagementScope(ManagementPath.DefaultPath, options); 
      mscope.Connect(); 

      ManagementPath mpPort = new ManagementPath("Win32_TCPIPPrinterPort"); 
      ManagementClass mcPort = new ManagementClass(mscope, mpPort, new ObjectGetOptions()); 
      ManagementObject moPort = mcPort.CreateInstance(); 
      moPort.Properties["Name"].Value = portName; 
      moPort.Properties["HostAddress"].Value = printerIP; 
      moPort.Properties["PortNumber"].Value = portNumber; 
      moPort.Properties["Protocol"].Value = 1; 
      moPort.Put(); 

      ManagementPath mpPrinter = new System.Management.ManagementPath("Win32_Printer"); 
      ManagementClass mcPrinter = new ManagementClass(mscope, mpPrinter, new ObjectGetOptions()); 
      ManagementObject moPrinter = mcPrinter.CreateInstance(); 
      moPrinter.Properties["Name"].Value = "Canon"; 
      moPrinter.Properties["DeviceID"].Value = "Canon"; 
      moPrinter.Properties["DriverName"].Value = "Canon iR C2880/C3380"; 
      moPrinter.Properties["PortName"].Value = portName; 
      moPrinter.Properties["Network"].Value = true; 
      moPrinter.Properties["Shared"].Value = false; 
      moPrinter.Put(); 
     } 
     catch 
     { 
      int msgCode = Marshal.GetLastWin32Error(); 
      string msg = GetSystemMessage(msgCode); 
      flag = false; 

     } 

     return flag; 
    } 

ответ

0

На самом деле после того, как я исследую эту проблему, я обнаружил, что имена драйверов принтеров отличаются в Windows 8. так же код может быть использован и успешно работают в Windows 8.

+0

Есть ли способ получить доступные имена драйверов принтера по коду или в любом месте файловой системы? – Gomiunik

+0

Да. Список драйверов принтера хранится в SYSTEM \ CurrentControlSet \ Control \ Print \ Environments \ Windows x64 \ Drivers \ Version-3 в реестре. (замените windows x64 на Windows x86 для 32-битных драйверов) –

 Смежные вопросы

  • Нет связанных вопросов^_^