Freigeben über


Process.CloseMainWindow-Methode

Schließt einen Prozess mit einer Benutzeroberfläche, indem eine Meldung zum Schließen an das Hauptfenster gesendet wird.

Namespace: System.Diagnostics
Assembly: System (in system.dll)

Syntax

'Declaration
Public Function CloseMainWindow As Boolean
'Usage
Dim instance As Process
Dim returnValue As Boolean

returnValue = instance.CloseMainWindow
public bool CloseMainWindow ()
public:
bool CloseMainWindow ()
public boolean CloseMainWindow ()
public function CloseMainWindow () : boolean

Rückgabewert

true, wenn die Meldung zum Schließen erfolgreich gesendet wurde. false, wenn der zugeordnete Prozess nicht über ein Hauptfenster verfügt oder wenn das Hauptfenster deaktiviert ist (z. B., wenn ein modales Dialogfeld angezeigt wird).

Ausnahmen

Ausnahmetyp Bedingung

PlatformNotSupportedException

Die Plattform ist Windows 98 oder Windows Millennium Edition (Windows Me). Legen Sie die ProcessStartInfo.UseShellExecute-Eigenschaft auf false fest, um auf diese Eigenschaft unter Windows 98 und Windows Me zuzugreifen.

Hinweise

Wenn ein Prozess ausgeführt wird, befindet sich seine Meldungsschleife im Wartezustand. Die Meldungsschleife wird jedes Mal ausgeführt, wenn vom Betriebssystem eine Windows-Meldung an den Prozess gesendet wird. Beim Aufrufen von CloseMainWindow wird eine Anforderung zum Schließen des Hauptfensters gesendet, die in einer wohlgeformten Anwendung alle untergeordneten Fenster schließt und alle aktiven Meldungsschleifen der Anwendung widerruft. Die Anforderung zum Beenden des Prozesses durch Aufrufen von CloseMainWindow erzwingt nicht die Beendigung der Anwendung. Die Anwendung kann vor dem Beenden eine Bestätigung durch den Benutzer anfordern, oder sie kann die Beendigung verweigern. Wenn Sie die Beendigung der Anwendung erzwingen möchten, verwenden Sie die Kill-Methode. Das Verhalten von CloseMainWindow entspricht dem Schließen des Hauptfensters einer Anwendung durch den Benutzer über das Systemmenü. Daher wird durch die Anforderung, den Prozess durch Schließen des Hauptfensters zu beenden, nicht die unmittelbare Beendigung der Anwendung erzwungen.

Daten, die vom Prozess oder von den für den Prozess reservierten Ressourcen bearbeitet werden, können bei einem Aufruf von Kill verloren gehen. Kill verursacht eine nicht ordnungsgemäße Prozessbeendigung und darf nur bei zwingender Notwendigkeit verwendet werden. CloseMainWindow aktiviert eine ordnungsgemäße Beendigung des Prozesses und schließt alle Fenster und ist somit für Anwendungen mit einer Oberfläche besser geeignet. Wenn CloseMainWindow fehlschlägt, können Sie den Prozess mit Kill beenden. Kill stellt die einzige Möglichkeit zum Beenden von Prozessen dar, die keine grafischen Oberflächen aufweisen.

Sie können Kill und CloseMainWindow nur für Prozesse aufrufen, die auf dem lokalen Computer ausgeführt werden. Sie können keine Prozesse auf Remotecomputern beenden. Für auf Remotecomputern ausgeführte Prozesse können Sie lediglich Informationen anzeigen lassen.

Hinweis zu Windows 98, Windows Millennium Edition: Diese Eigenschaft ist auf dieser Plattform nicht verfügbar, wenn beim Starten des Prozesses ProcessStartInfo.UseShellExecute auf true festgelegt ist.

Beispiel

Im folgenden Beispiel wird eine Instanz von Editor gestartet. Anschließend wird die Auslastung des physikalischen Speichers durch den zugeordneten Prozess in Intervallen von zwei Sekunden für maximal zehn Sekunden abgerufen. Dabei wird ermittelt, ob der Prozess vor Ablauf von zehn Sekunden beendet wird. Im Beispiel wird der Prozess beendet, wenn er nach zehn Sekunden weiterhin ausgeführt wird.

Imports System
Imports System.Diagnostics
Imports System.Threading

Namespace Process_Sample
   Class MyProcessClass

      Public Shared Sub Main()
         Try

            Dim myProcess As Process
            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.ToString())
                  ' 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()

         Catch e As Exception
            Console.WriteLine("The following exception was raised: ")
            Console.WriteLine(e.Message)
         End Try
      End Sub 'Main
   End Class 'MyProcessClass
End Namespace 'Process_Sample
using System;
using System.Diagnostics;
using System.Threading;

namespace Process_Sample
{
   class MyProcessClass
   {
      public static void 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: " 
                                        + myProcess.WorkingSet.ToString());
                   // 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)
         {
            Console.WriteLine("The following exception was raised: ");
            Console.WriteLine(e.Message);
         }
      }
   }
}
#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 );
   }

}

.NET Framework-Sicherheit

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

Process-Klasse
Process-Member
System.Diagnostics-Namespace