2011-10-10 3 views
2

.NET 코드에서 다른 도메인에있는 원격 컴퓨터에서 실행중인 프로세스 목록을 가져 오는 방법을 찾고 있습니다..NET - 다른 도메인에있는 컴퓨터에서 실행중인 프로세스 가져 오기

기계에 대한 사용자 이름과 암호가 있습니다. 그러나 System.Diagnostics.Process.GetProcesses() 함수에는 두 가지 재정의 만 있습니다. 그 중 하나는 원격 컴퓨터의 이름을 수락하지만 해당 컴퓨터에 사용자 이름과 암호를 보낼 수 없습니다. 펀치 톤이 작동하려면 도메인에 이미 액세스 권한이있는 시스템이어야합니다.

이 작업을 수행 할 수 있는지 확실하지 않지만 Interop 및 WMI를 통해 수행 할 수 있습니다.

. NET 응용 프로그램은 소매점 위치에서 Windows XP 시스템에 연결해야하는 Windows 7 모니터링 시스템에서 실행됩니다.

이 질문을 게시하기 전에 이전 질문을 검색하고 Google을 사용해 보았습니다. 거기에 중복 된 질문이있는 경우 알려 주시면이 질문을 삭제하겠습니다.

답변

2

내 자신의 질문에 답하는 것이 싫지만 다음 사람이이 문제에 직면 할 수있게하기 위해 System.Management 개체를 통해보다 쉬운 방법을 찾았습니다.

codeproject.com에 소스 코드가 포함 된 완전한 작동 응용 프로그램이 있습니다.

http://www.codeproject.com/KB/cs/Remote_process_controller.aspx

나는 꽤 내 선택은 특정 목적으로 수정하고,이 작업을 수행하는 가장 작은 funciton을 얻었다. 나는 다음 사람이 오기 위해 그것을 나눠주고있다.

System.Management에 대한 참조를 프로젝트에 추가해야합니다.

private bool CheckForExpectedProcess(string userName, string password, string machineName, string logonDomain, string PartialProcessname) 
    { 
     bool ReturnValue = false; 
     System.Management.ManagementScope managementScope; 
     try 
     { 
      System.Management.ConnectionOptions connOptions = new System.Management.ConnectionOptions(); 

      connOptions.Impersonation = System.Management.ImpersonationLevel.Impersonate; 
      connOptions.EnablePrivileges = true; 
      connOptions.Username = logonDomain + "\\" + userName; 
      connOptions.Password = password; 
      managementScope = new System.Management.ManagementScope(@"\\" + machineName + @"\ROOT\CIMV2", connOptions); 

      managementScope.Connect(); 
      System.Management.ManagementObjectSearcher objSearcher = new System.Management.ManagementObjectSearcher("SELECT Name FROM Win32_Process WHERE NAME LIKE'%" + PartialProcessname + "%'"); 
      System.Management.ManagementOperationObserver opsObserver = new System.Management.ManagementOperationObserver(); 
      objSearcher.Scope = managementScope; 
      string[] sep = { "\n", "\t" }; 

      System.Management.ManagementObjectCollection objects = objSearcher.Get(); 
      ReturnValue = objects.Count > 0; 

     } 
     catch (Exception ex) 
     { 
      // handle error - we log it to our own system, but it's up to you. 
     } 

     return ReturnValue; 
    } 
+0

정확히 내가 필요로했던 것, 공유 주셔서 감사합니다 ... – Moshisho

2

runas /networkonly에 해당하는 것을 구현하려는 경우 로컬 컴퓨터의 프로세스 ID는 변경되지 않고 모든 자격 증명을 사용하여 모든 아웃 바운드 네트워크 액세스가 수행됩니다.

SO 게시물에 따르면 How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?CreateProcessWithLogonWLOGON_NETCREDENTIALS_ONLY을 사용해야합니다.

+0

다른 답변은 매우 유망 해 보입니다. 고맙습니다! 나는 지금 그것을 시도 할 것이다. – David

+0

나는 쉬운 방법이 있어야한다고 확신했기 때문에 이런 방식으로 시도했다. 나는 그것을 발견했다. 투표 해 주셨지만 CodeProject.com에서 더 나은 답변과 샘플 프로젝트 코드를 발견했습니다. 그러나 시간 내 주셔서 감사합니다! "CreateProcessWithLogonW"라는 용어를 사용하여 나를 다른 많은 게시물로 안내했으며, 그 중 일부는 WMI를 대안으로 언급하여 간접적으로 도움을주었습니다. 시간 내 주셔서 다시 한 번 감사드립니다! – David

1

귀하의 요구 사항을 정확히 충족하는 tool을 시도해보십시오. 모든 도메인에서 원격 컴퓨터를 모니터링 할 수 있습니다. 이 도구는 원격 기계 프로세스, 설치된 소프트웨어, 장치, 서비스, 세션 등을 모니터 할 수 있습니다 ...

+0

나는 그가 도구가 아니라 API를 원한다고 생각합니다. –

관련 문제