2011-01-27 2 views

답변

15

Process.GetProcessById을 사용하면 Process을 얻을 수 있습니다. Process에는 실행중인 프로그램에 대한 많은 정보가 있습니다. Process.ProcessName에 이름이 주어지면 Process.MainModule.FileName은 실행 파일의 이름을 제공합니다.

+0

네가 맞습니다. 고맙습니다. 그리고 그 과정에 관한 다른 정보도 얻을 수 있습니다. – user579674

+3

x86 프로그램에서 64 비트 대상에서 Process.MainModule.Filename을 호출하면 오류가 발생합니다. ProcessName은 그 제한을 겪지 않습니다. – EricLaw

+0

@EricLaw 그 반대라면 사실입니까? 64 비트 프로그램을 사용하여 x86 타겟에서 Process.MainModule.Filename을 호출 할 때처럼? – FreeSnow

12
Process.GetProcessById(id).ProcessName 
0

// 여기 작업 관리자 메모리를 반환하는 간단한 방법이 있습니다. 프로세스 ID가 존재하지 않으면 예외가 발생하고 메모리에 0을 반환합니다.

/// <summary> 
    /// Gets the process memory. 
    /// </summary> 
    /// <param name="processId">The process identifier.</param> 
    /// <returns></returns> 
    /// <para> </para> 
    /// <para> </para> 
    /// <exception cref="ArgumentException"> </exception> 
    /// <exception cref="ArgumentNullException"> </exception> 
    /// <exception cref="ComponentModel.Win32Exception"> </exception> 
    /// <exception cref="InvalidOperationException"> </exception> 
    /// <exception cref="PlatformNotSupportedException"> </exception> 
    /// <exception cref="UnauthorizedAccessException"> </exception> 
    public static long GetProcessMemory(int processId) 
    { 
     try 
     { 
      var instanceName = Process.GetProcessById(processId).ProcessName; 

      using (var performanceCounter = new PerformanceCounter("Process", "Working Set - Private", instanceName)) 
      { 
       return performanceCounter.RawValue/Convert.ToInt64(1024); 
      } 
     } 
     catch (Exception) 
     { 
      return 0; 
     } 
    }