Process.ExitCode Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает значение, заданное связанным процессом при завершении.
public:
property int ExitCode { int get(); };
public int ExitCode { get; }
[System.ComponentModel.Browsable(false)]
public int ExitCode { get; }
member this.ExitCode : int
[<System.ComponentModel.Browsable(false)>]
member this.ExitCode : int
Public ReadOnly Property ExitCode As Integer
Значение свойства
Код, который задал связанный процесс при завершении.
- Атрибуты
Исключения
Вы пытаетесь получить доступ к свойству ExitCode процесса, запущенного на удаленном компьютере. Это свойство доступно только для процессов, запущенных на локальном компьютере.
Примеры
В следующем примере запускается экземпляр Блокнота. Затем в примере извлекаются и отображаются различные свойства связанного процесса. В примере определяется, когда завершается процесс, и отображается код завершения процесса.
#using <system.dll>
using namespace System;
using namespace System::Diagnostics;
int main()
{
// Define variables to track the peak
// memory usage of the process.
_int64 peakPagedMem = 0,peakWorkingSet = 0,peakVirtualMem = 0;
Process^ myProcess = nullptr;
try
{
// Start the process.
myProcess = Process::Start( "NotePad.exe" );
// Display the process statistics until
// the user closes the program.
do
{
if ( !myProcess->HasExited )
{
// Refresh the current process property values.
myProcess->Refresh();
Console::WriteLine();
// Display current process statistics.
Console::WriteLine( "{0} -", myProcess );
Console::WriteLine( "-------------------------------------" );
Console::WriteLine( " physical memory usage: {0}", myProcess->WorkingSet64 );
Console::WriteLine( " base priority: {0}", myProcess->BasePriority );
Console::WriteLine( " priority class: {0}", myProcess->PriorityClass );
Console::WriteLine( " user processor time: {0}", myProcess->UserProcessorTime );
Console::WriteLine( " privileged processor time: {0}", myProcess->PrivilegedProcessorTime );
Console::WriteLine( " total processor time: {0}", myProcess->TotalProcessorTime );
Console::WriteLine(" PagedSystemMemorySize64: {0}", myProcess->PagedSystemMemorySize64);
Console::WriteLine(" PagedMemorySize64: {0}", myProcess->PagedMemorySize64);
// Update the values for the overall peak memory statistics.
peakPagedMem = myProcess->PeakPagedMemorySize64;
peakVirtualMem = myProcess->PeakVirtualMemorySize64;
peakWorkingSet = myProcess->PeakWorkingSet64;
if ( myProcess->Responding )
{
Console::WriteLine( "Status = Running" );
}
else
{
Console::WriteLine( "Status = Not Responding" );
}
}
}
while ( !myProcess->WaitForExit( 1000 ) );
Console::WriteLine();
Console::WriteLine( "Process exit code: {0}", myProcess->ExitCode );
// Display peak memory statistics for the process.
Console::WriteLine( "Peak physical memory usage of the process: {0}", peakWorkingSet );
Console::WriteLine( "Peak paged memory usage of the process: {0}", peakPagedMem );
Console::WriteLine( "Peak virtual memory usage of the process: {0}", peakVirtualMem );
}
finally
{
if ( myProcess != nullptr )
{
myProcess->Close();
}
}
}
using System;
using System.Diagnostics;
namespace ProcessSample
{
class ProcessMonitorSample
{
public static void Main()
{
// Define variables to track the peak
// memory usage of the process.
long peakPagedMem = 0,
peakWorkingSet = 0,
peakVirtualMem = 0;
// Start the process.
using (Process myProcess = Process.Start("NotePad.exe"))
{
// Display the process statistics until
// the user closes the program.
do
{
if (!myProcess.HasExited)
{
// Refresh the current process property values.
myProcess.Refresh();
Console.WriteLine();
// Display current process statistics.
Console.WriteLine($"{myProcess} -");
Console.WriteLine("-------------------------------------");
Console.WriteLine($" Physical memory usage : {myProcess.WorkingSet64}");
Console.WriteLine($" Base priority : {myProcess.BasePriority}");
Console.WriteLine($" Priority class : {myProcess.PriorityClass}");
Console.WriteLine($" User processor time : {myProcess.UserProcessorTime}");
Console.WriteLine($" Privileged processor time : {myProcess.PrivilegedProcessorTime}");
Console.WriteLine($" Total processor time : {myProcess.TotalProcessorTime}");
Console.WriteLine($" Paged system memory size : {myProcess.PagedSystemMemorySize64}");
Console.WriteLine($" Paged memory size : {myProcess.PagedMemorySize64}");
// Update the values for the overall peak memory statistics.
peakPagedMem = myProcess.PeakPagedMemorySize64;
peakVirtualMem = myProcess.PeakVirtualMemorySize64;
peakWorkingSet = myProcess.PeakWorkingSet64;
if (myProcess.Responding)
{
Console.WriteLine("Status = Running");
}
else
{
Console.WriteLine("Status = Not Responding");
}
}
}
while (!myProcess.WaitForExit(1000));
Console.WriteLine();
Console.WriteLine($" Process exit code : {myProcess.ExitCode}");
// Display peak memory statistics for the process.
Console.WriteLine($" Peak physical memory usage : {peakWorkingSet}");
Console.WriteLine($" Peak paged memory usage : {peakPagedMem}");
Console.WriteLine($" Peak virtual memory usage : {peakVirtualMem}");
}
}
}
}
Imports System.Diagnostics
Namespace ProcessSample
Class ProcessMonitorSample
Public Shared Sub Main()
' Define variables to track the peak
' memory usage of the process.
Dim peakPagedMem As Long = 0
Dim peakWorkingSet As Long = 0
Dim peakVirtualMem As Long = 0
' Start the process.
Using myProcess = Process.Start("NotePad.exe")
' Display process statistics until
' the user closes the program.
Do
If Not myProcess.HasExited Then
' Refresh the current process property values.
myProcess.Refresh()
Console.WriteLine()
' Display current process statistics.
Console.WriteLine($"{myProcess} -")
Console.WriteLine("-------------------------------------")
Console.WriteLine($" Physical memory usage : {myProcess.WorkingSet64}")
Console.WriteLine($" Base priority : {myProcess.BasePriority}")
Console.WriteLine($" Priority class : {myProcess.PriorityClass}")
Console.WriteLine($" User processor time : {myProcess.UserProcessorTime}")
Console.WriteLine($" Privileged processor time : {myProcess.PrivilegedProcessorTime}")
Console.WriteLine($" Total processor time : {myProcess.TotalProcessorTime}")
Console.WriteLine($" Paged system memory size : {myProcess.PagedSystemMemorySize64}")
Console.WriteLine($" Paged memory size : {myProcess.PagedMemorySize64}")
' Update the values for the overall peak memory statistics.
peakPagedMem = myProcess.PeakPagedMemorySize64
peakVirtualMem = myProcess.PeakVirtualMemorySize64
peakWorkingSet = myProcess.PeakWorkingSet64
If myProcess.Responding Then
Console.WriteLine("Status = Running")
Else
Console.WriteLine("Status = Not Responding")
End If
End If
Loop While Not myProcess.WaitForExit(1000)
Console.WriteLine()
Console.WriteLine($" Process exit code : {myProcess.ExitCode}")
' Display peak memory statistics for the process.
Console.WriteLine($" Peak physical memory usage of the process : {peakWorkingSet}")
Console.WriteLine($" Peak paged memory usage of the process : {peakPagedMem}")
Console.WriteLine($" Peak virtual memory usage of the process : {peakVirtualMem}")
End Using
End Sub
End Class
End Namespace
Комментарии
Используйте для ExitCode получения состояния, возвращенного системным процессом при выходе из системы. Код выхода можно использовать так же, как целочисленное возвращаемое main()
значение из процедуры.
Значение ExitCode для процесса отражает конкретное соглашение, реализованное разработчиком приложения для этого процесса. Если вы используете значение кода выхода для принятия решений в коде, убедитесь, что известно соглашение о коде выхода, используемое процессом приложения.
Разработчики обычно указывают на успешный выход значением, равным ExitCode нулю, а также обозначают ошибки ненулевыми значениями, которые вызывающий метод может использовать для определения причины ненормального завершения процесса. Не обязательно следовать этим руководящим принципам, но они являются конвенцией.
Если вы попытаетесь получить ExitCode до завершения процесса, при попытке будет создано исключение. Сначала проверьте свойство , HasExited чтобы проверить, завершился ли связанный процесс.
Примечание
Если стандартные выходные данные были перенаправлены в асинхронные обработчики событий, возможно, обработка выходных данных не будет завершена при HasExited возврате true
. Чтобы убедиться, что асинхронная обработка событий завершена, вызовите перегрузку WaitForExit() , которая не принимает параметр, перед проверкой HasExited.
Чтобы вызвать завершение связанного Kill процесса, можно использовать CloseMainWindow метод или .
При завершении связанного процесса можно получать уведомления двумя способами: синхронно и асинхронно. Синхронное уведомление зависит от вызова WaitForExit метода , чтобы приостановить обработку приложения до тех пор, пока связанный компонент не завершит работу. Асинхронное уведомление зависит от Exited события . При использовании асинхронного уведомления необходимо задать значение true
, EnableRaisingEvents чтобы Process компонент получал уведомление о завершении процесса.