Process.Kill

23/10/2007 - 01:12 von Marcus Belz | Report spam
Hallo zusammen!

ich habe eine sogenannte Workbench, über die verschiedene Programme
gestartet und verwaltet werden können:

- ActiveX Komponenten (VB6)
- Standalone-Exe (VB6)
- .Net Windows-Applications

Die Standalone-Exe-Module bzw. .NET-Module werden über folgende Anweisungen
gestartet:

Dim procInfo As System.Diagnostics.ProcessStartInfo
procInfo = New System.Diagnostics.ProcessStartInfo(executable)
procInfo.WindowStyle = ProcessWindowStyle.Normal
procInfo.Arguments = strCommandLineArgument
procInfo.UseShellExecute = False
proc = Process.Start(procInfo)

Die Verwaltung der Module erfolgt im Wesentlichen über die Prozess-ID.
Mit den obigen Anweisungen werden die Prozesse mit dem gleichen
Security-Kontext gestartet, in dem die Workbench làuft. Beim Beenden der
Workbench sollen alle Module geschlossen werden. Die Workbench bietet die
übliche Frage wie "Möchten Sie die Anwendung wirklich beenden?" an und soll
somit den Anwendner davon befreien, diese Frage für jedes Modul zu
beantworten. Aus diesem Grund sollen bei positiver Antwort alle Module
geschlossen, d.h. hart abgeschossen werden. Zum Einsatz daher nicht die
Anweisung

proc.CoseMainsWindow()

sondern

proc.Kill()

Allerdindgs wird beim Beenden der Standalone-EXE-Dateien regelàßig eine
Win32Exception mit der Meldung "Zugriff verweigert" ausgelöst.
Warum habe ich keine Berechtigung, die von mir gestarteten Prozesse über die
Kill-Methode des Prozess-Objektes zu beenden?

Irgendjemand eine Idee?

Vielen Dank schon mal im Voraus!

Gruß,
Marcus
 

Lesen sie die antworten

#1 Wolfgang Schlicker
25/10/2007 - 22:07 | Warnen spam
Hallo Marcus,

es muss nicht unbedingt am Benutzer liegen (siehe Note):
versuch mal nach "process.Kill()" noch "process.WaitForExit()" anzuhàngen.
Note:
If the call to the Kill method is made while the process is currently
terminating, a Win32Exception is thrown for Access Denied.



Grüsse,
Wolfgang

"Marcus Belz" schrieb im Newsbeitrag
news:%
Hallo zusammen!

ich habe eine sogenannte Workbench, über die verschiedene Programme
gestartet und verwaltet werden können:

- ActiveX Komponenten (VB6)
- Standalone-Exe (VB6)
- .Net Windows-Applications

Die Standalone-Exe-Module bzw. .NET-Module werden über folgende
Anweisungen gestartet:

Dim procInfo As System.Diagnostics.ProcessStartInfo
procInfo = New System.Diagnostics.ProcessStartInfo(executable)
procInfo.WindowStyle = ProcessWindowStyle.Normal
procInfo.Arguments = strCommandLineArgument
procInfo.UseShellExecute = False
proc = Process.Start(procInfo)

Die Verwaltung der Module erfolgt im Wesentlichen über die Prozess-ID.
Mit den obigen Anweisungen werden die Prozesse mit dem gleichen
Security-Kontext gestartet, in dem die Workbench làuft. Beim Beenden der
Workbench sollen alle Module geschlossen werden. Die Workbench bietet die
übliche Frage wie "Möchten Sie die Anwendung wirklich beenden?" an und
soll somit den Anwendner davon befreien, diese Frage für jedes Modul zu
beantworten. Aus diesem Grund sollen bei positiver Antwort alle Module
geschlossen, d.h. hart abgeschossen werden. Zum Einsatz daher nicht die
Anweisung

proc.CoseMainsWindow()

sondern

proc.Kill()

Allerdindgs wird beim Beenden der Standalone-EXE-Dateien regelàßig eine
Win32Exception mit der Meldung "Zugriff verweigert" ausgelöst.
Warum habe ich keine Berechtigung, die von mir gestarteten Prozesse über
die Kill-Methode des Prozess-Objektes zu beenden?

Irgendjemand eine Idee?

Vielen Dank schon mal im Voraus!

Gruß,
Marcus

Ähnliche fragen