Computerwissenschaften

Starten Sie etwas mit Process.Start in VB.NET

Die Start- Methode des Process- Objekts ist möglicherweise eines der am meisten unterschätzten Tools, die einem Programmierer zur Verfügung stehen. Als ein . NET- Methode, Start hat eine Reihe von Überladungen, bei denen es sich um verschiedene Parametersätze handelt, die genau bestimmen, was die Methode tut. Mit den Überladungen können Sie nahezu alle Parameter angeben, die Sie beim Start möglicherweise an einen anderen Prozess übergeben möchten.

Was Sie mit Process.Start tun können, ist wirklich nur durch die Prozesse begrenzt, die Sie damit verwenden können. Wenn Sie Ihre textbasierte ReadMe-Datei im Editor anzeigen möchten, ist dies so einfach wie:

Process.Start ("ReadMe.txt")
Process.Start ("Notizblock", "ReadMe.txt")

In diesem Beispiel wird davon ausgegangen, dass sich die ReadMe-Datei im selben Ordner wie das Programm befindet und dass Notepad die Standardanwendung für TXT-Dateitypen ist und sich im Pfad der Systemumgebung befindet.

 

Process.Start Ähnlich wie der Shell-Befehl in VB6

Für Programmierer, die mit Visual Basic 6 vertraut sind, ähnelt Process.Start in etwa dem Befehl VB 6 Shell . In VB 6 würden Sie Folgendes verwenden:

lngPID=Shell ("MyTextFile.txt", vbNormalFocus)

 

Verwenden von Process.Start

Mit diesem Code können Sie Notepad maximiert starten und ein ProcessStartInfo- Objekt erstellen , das Sie für eine genauere Steuerung verwenden können:

ProcessProperties als neu 
dimmen ProcessStartInfo 
ProcessProperties.FileName="notepad " ProcessProperties.Arguments="myTextFile.txt" 
ProcessProperties.WindowStyle=
ProcessWindowStyle.Maximized Dim myProcess As Process=Process.Start (ProcessProperties)

 

Starten eines versteckten Prozesses

Sie können sogar einen versteckten Prozess starten.

ProcessProperties.WindowStyle=ProcessWindowStyle.Hidden

 

Abrufen des Namens eines Prozesses

Die Arbeit mit Process.Start als .NET-Objekt bietet Ihnen viele Funktionen. Sie können beispielsweise den Namen des gestarteten Prozesses abrufen. Dieser Code zeigt „Notizblock“ im Ausgabefenster an:

Dim myProcess As Process=Process.Start ("MyTextFile.txt") Console.WriteLine (myProcess.ProcessName)

Dies war etwas , man konnte nicht mit dem VB6 tut Shell – Befehl , weil er die neue Anwendung asynchron gestartet. Die Verwendung von WaitForExit  kann das umgekehrte Problem in .NET verursachen, da Sie einen Prozess in einem neuen Thread starten müssen, wenn Sie ihn asynchron ausführen möchten. Zum Beispiel, wenn die Komponenten in einer Form aktiv bleiben sollen, in der ein Prozess gestartet wurde, und WaitForExit

Eine Möglichkeit, den Prozess zum Anhalten zu zwingen, ist die Verwendung der Kill- Methode.

myProcess.Kill ()

Dieser Code wartet zehn Sekunden und beendet dann den Vorgang.

Manchmal ist jedoch eine erzwungene Verzögerung erforderlich, damit der Prozess vollständig beendet werden kann, um einen Fehler zu vermeiden.

myProcess.WaitForExit (10000) 
'Wenn der Vorgang nicht innerhalb von 
' 10 Sekunden abgeschlossen ist, 
beenden Sie ihn. Wenn nicht myProcess.HasExited, dann 
myProcess.Kill () 
End If 
Threading.Thread.Sleep (1) 
Console.WriteLine ("Editor beendet:" "_ 
& myProcess.ExitTime & _ 
Environment.NewLine & _ 
" Exit Code: "& _ 
myProcess.ExitCode)

In den meisten Fällen ist es wahrscheinlich eine gute Idee, Ihre Verarbeitung in einen  Using-  Block zu setzen, um sicherzustellen, dass die vom Prozess verwendeten Ressourcen freigegeben werden.

MyProcess Verwendung als Prozess=Neuer Prozess 
"Ihr Code hier geht 
End Using

Um die Arbeit mit all dem noch einfacher zu machen, gibt es sogar eine  Prozesskomponente  , die Sie Ihrem Projekt hinzufügen können, damit Sie viele der oben gezeigten Dinge zur Entwurfszeit anstatt zur Laufzeit ausführen können.

Dies erleichtert unter anderem das Codieren von Ereignissen, die vom Prozess ausgelöst werden, z. B. das Ereignis, wenn der Prozess beendet wurde. Sie können auch einen Handler mit folgendem Code hinzufügen:

' 
Erlaube dem Prozess, Ereignisse auszulösen myProcess.EnableRaisingEvents=True 
' füge einen Exited Event Handler hinzu 
AddHandler myProcess.Exited, _ 
AddressOf Me.ProcessExited 
Private Sub ProcessExited (ByVal Absender als Objekt, _ 
ByVal e As System.EventArgs) 
'Ihr Code wird hier abgelegt 
End Sub

Die einfache Auswahl des Ereignisses für die Komponente ist jedoch viel einfacher.

 

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.