Process.HasExited プロパティ

定義

関連付けられているプロセスが終了したかどうかを示す値を取得します。Gets a value indicating whether the associated process has been terminated.

public:
 property bool HasExited { bool get(); };
[System.ComponentModel.Browsable(false)]
public bool HasExited { get; }
member this.HasExited : bool
Public ReadOnly Property HasExited As Boolean

プロパティ値

Process コンポーネントが参照するオペレーティング システム プロセスが終了している場合は true。それ以外の場合は falsetrue if the operating system process referenced by the Process component has terminated; otherwise, false.

属性

例外

オブジェクトに関連付けられているプロセスはありません。There is no process associated with the object.

プロセスの終了コードを取得できませんでした。The exit code for the process could not be retrieved.

リモート コンピューターで実行中のプロセスの HasExited プロパティにアクセスしようとしています。You are trying to access the HasExited property for a process that is running on a remote computer. このプロパティはローカル コンピューターで実行中のプロセスに対してのみ使用可能です。This property is available only for processes that are running on the local computer.

次の例では、メモ帳のインスタンスを起動します。The following example starts an instance of Notepad. 次に、関連付けられたプロセスの物理メモリ使用量を2秒間隔で最大10秒間取得します。It then retrieves the physical memory usage of the associated process at 2 second intervals for a maximum of 10 seconds. この例では、10秒が経過する前にプロセスが終了するかどうかを検出します。The example detects whether the process exits before 10 seconds have elapsed. この例では、10秒後にプロセスがまだ実行されている場合、プロセスを終了します。The example closes the process if it is still running after 10 seconds.

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   try
   {
      Process^ myProcess;
      myProcess = Process::Start(  "Notepad.exe" );
      
      // Display physical memory usage 5 times at intervals of 2 seconds.
      for ( int i = 0; i < 5; i++ )
      {
         if (  !myProcess->HasExited )
         {
            
            // Discard cached information about the process.
            myProcess->Refresh();
            
            // Print working set to console.
            Console::WriteLine( "Physical Memory Usage : {0}", myProcess->WorkingSet.ToString() );
            
            // Wait 2 seconds.
            Thread::Sleep( 2000 );
         }
         else
         {
            break;
         }

      }
      myProcess->CloseMainWindow();
      
      // Free resources associated with process.
      myProcess->Close();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The following exception was raised: " );
      Console::WriteLine( e->Message );
   }

}

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ProcessSample
{
    class MyProcessClass
    {
        public static void Main()
        {
            try
            {
                using (Process myProcess = Process.Start("Notepad.exe"))
                {
                    // Display physical memory usage 5 times at intervals of 2 seconds.
                    for (int i = 0; i < 5; i++)
                    {
                        if (!myProcess.HasExited)
                        {
                            // Discard cached information about the process.
                            myProcess.Refresh();
                            // Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}");
                            // Wait 2 seconds.
                            Thread.Sleep(2000);
                        }
                        else
                        {
                            break;
                        }
                    }

                    // Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow();
                    // Free resources associated with process.
                    myProcess.Close();
                }
            }
            catch (Exception e) when (e is Win32Exception || e is FileNotFoundException)
            {
                Console.WriteLine("The following exception was raised: ");
                Console.WriteLine(e.Message);
            }
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.IO
Imports System.Threading

Namespace Process_Sample
    Class MyProcessClass

        Public Shared Sub Main()
            Try
                Using myProcess = Process.Start("Notepad.exe")
                    ' Display physical memory usage 5 times at intervals of 2 seconds.
                    Dim i As Integer
                    For i = 0 To 4
                        If Not myProcess.HasExited Then

                            ' Discard cached information about the process.
                            myProcess.Refresh()
                            ' Print working set to console.
                            Console.WriteLine($"Physical Memory Usage: {myProcess.WorkingSet}")
                            ' Wait 2 seconds.
                            Thread.Sleep(2000)
                        Else
                            Exit For
                        End If

                    Next i

                    ' Close process by sending a close message to its main window.
                    myProcess.CloseMainWindow()
                    ' Free resources associated with process.
                    myProcess.Close()
                End Using
            Catch e As Exception When TypeOf e Is Win32Exception Or TypeOf e Is FileNotFoundException
                Console.WriteLine("The following exception was raised: ")
                Console.WriteLine(e.Message)
            End Try
        End Sub
    End Class
End Namespace 'Process_Sample

注釈

HasExitedtrue の値は、関連付けられたプロセスが通常または異常に終了したことを示します。A value of true for HasExited indicates that the associated process has terminated, either normally or abnormally. CloseMainWindow または Killを呼び出すことによって、関連付けられているプロセスを強制的に終了するように要求または強制できます。You can request or force the associated process to exit by calling CloseMainWindow or Kill. ハンドルがプロセスに対して開かれている場合、オペレーティングシステムはプロセスが終了したときにプロセスメモリを解放しますが、ハンドル、終了コード、終了時刻など、プロセスに関する管理情報を保持します。If a handle is open to the process, the operating system releases the process memory when the process has exited, but retains administrative information about the process, such as the handle, exit code, and exit time. この情報を取得するには、ExitCode プロパティと ExitTime プロパティを使用します。To get this information, you can use the ExitCode and ExitTime properties. これらのプロパティは、このコンポーネントによって開始されたプロセスに対して自動的に設定されます。These properties are populated automatically for processes that were started by this component. システムプロセスに関連付けられているすべての Process コンポーネントが破棄され、終了したプロセスに対するハンドルがなくなったときに、管理情報がリリースされます。The administrative information is released when all the Process components that are associated with the system process are destroyed and hold no more handles to the exited process.

プロセスは、コードとは無関係に終了できます。A process can terminate independently of your code. このコンポーネントを使用してプロセスを開始した場合、関連付けられているプロセスが個別に終了した場合でも、システムによって HasExited の値が自動的に更新されます。If you started the process using this component, the system updates the value of HasExited automatically, even if the associated process exits independently.

注意

標準出力が非同期イベントハンドラーにリダイレクトされた場合、このプロパティが trueを返したときに出力処理が完了していない可能性があります。When standard output has been redirected to asynchronous event handlers, it is possible that output processing will not have completed when this property returns true. 非同期イベント処理が完了したことを確認するには、HasExitedを確認する前に、パラメーターを取らない WaitForExit() オーバーロードを呼び出します。To ensure that asynchronous event handling has been completed, call the WaitForExit() overload that takes no parameter before checking HasExited.

セキュリティ

LinkDemand
直前の呼び出し元に対する完全な信頼の場合。for full trust for the immediate caller. このメンバーは、部分的に信頼されているコードから使用することはできません。This member cannot be used by partially trusted code.

適用対象

こちらもご覧ください