2014-09-01 3 views
1

Windows에 프린터 및 프린터 드라이버를 추가하려고이 C# 코드를 시도했습니다. Windows 7에서 작동했지만 Windows 8에서는 작동하지 않았습니다. 코드가 moPrinter.Put() 일 때 Exception (Generic failure)이 발생했습니다. 누구든지 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

사실, 나는 방식이 있는가 프린터 드라이버 이름이 그래서 같은 코드를 사용할 수있는 윈도우 8에서 다른과

+0

윈도우 8에 성공적으로 작동 것으로 나타났습니다 코드 또는 파일 시스템의 어디에서나 사용 가능한 프린터 드라이버 이름을 검색 하시겠습니까? – Gomiunik

+0

예. printerdrivers 목록은 레지스트리의 SYSTEM \ CurrentControlSet \ Control \ Print \ Environments \ Windows x64 \ Drivers \ Version-3에 저장됩니다. (Windows x64를 32 비트 드라이버 용 Windows x86으로 대체) –