2013-05-03 8 views
1

인쇄 서버의 네트워크 프린터가 원격 컴퓨터에 연결되어 있지만 원격 부분에 문제가 있는지 확인하는 응용 프로그램을 작성 중입니다 ... System.Printing을 사용하고 있습니다. 'compID'변수를 통해 원격 호스트 이름/IP 주소를 전달합니다. 제가하는 데 문제는 코드가 항상 내 로컬 컴퓨터에 네트워크 프린터가 아닌 원격 시스템 반환한다는 것입니다 :원격 컴퓨터에서 네트워크 프린터 열거

EnumeratedPrintQueueTypes[] compEnumerationFlags = { EnumeratedPrintQueueTypes.Connections }; 

PrintServer compPrinters = new PrintServer("\\\\" + compID); 
PrintQueueCollection printQueuesOnComputer = compPrinters.GetPrintQueues(compEnumerationFlags); 

List<string> compPrinterList = new List<string>(); 

foreach (PrintQueue printer in printQueuesOnComputer) 
    { 
     compPrinterList.Add(printer.Name); 
    } 

string csv = string.Join("\n", compPrinterList.ToArray()); 
Microsoft.VisualBasic.Interaction.MsgBox(csv); 

가 마지막에 지저분한 비트 용서를하지만, 단지 신속하고 더러운 방법 저에게 결과가 무엇인지 잠시 확인해주십시오.

"compID"변수를 실제 인쇄 서버로 변경하고 "Connections"에서 "Shared"로 플래그를 변경하면 코드가 프린트 서버의 모든 공유 프린터를 성공적으로 반환합니다.

이 모든 것이 우리 도메인에서 관리자로 실행되므로 잘만되면 여기에 문제가되지 않을 것입니다. 간과 할 수있는 것이 있거나 PrintServer로 연결할 수있는 컴퓨터 유형에 대한 일종의 제한이 있습니다. ?

+0

어디에서 compID를 설정합니까? – TheKingDave

+0

이전 텍스트 상자에서. 그러나 "PrintServer compPrinters = new PrintServer ("\\\\ xxx.xxx.xxx.xxx ");"에서 IP 주소/호스트 이름을 하드 코드해도 " - 그때 정확히 똑같은 문제가 생깁니다 – cmode

+0

다음 플래그가 있어야합니다? 당신이 말했듯이 이상한 점은 'compID'변수를 실제 프린트 서버로 변경하고 플래그를 "Connections"에서 "Shared"로 변경하면 코드가 프린트 서버의 모든 공유 프린터를 성공적으로 반환한다는 것입니다. compID 나 그 원인이되는 플래그가 무엇입니까? – TheKingDave

답변

0

그래서 약간의 테스트를 거쳐 충분히 작업을 수행 할 수있는 해결 방법이 있습니다. 프린터는를 사용하여 somepoint에서 시스템에 연결되었을 것입니다. 응용 프로그램에서3210

내가 printui.dll 가져온 :

[DllImport("printui.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
     private static extern void PrintUIEntryW(IntPtr hwnd, IntPtr hinst, string lpszCmdLine, int nCmdShow); 

을 그리고 나중에 나는 모든 당 기계 연결을 나열 할 원격 시스템의 /ge 플래그를 사용, 출력 임시 텍스트 파일로, 다음 확인하는 것이 그래서,

PrintUIEntryW(IntPtr.Zero, IntPtr.Zero, "/c \\\\" + compID + " /ge /q /f c:\\temp\\printers.txt", 0); 

string file = File.ReadAllText("c:\\temp\\printers.txt"); 
if (file.Contains(printerID)) 
{ 
    exist = true; 
} 
File.Delete("c:\\temp\\printers.txt"); 

나는이 아마 그것에 대해 이동하는 가장 좋은 방법이 아니다 알고 있어요,하지만 난에서 운영하는 환경에서 작동하는 것 같다 : 프린터 이름이 텍스트 파일에 포함되어 있는지 확인합니다 나는 대답으로 이것을 제공하고있다.

관련 문제