INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

WinAPI CreateProcess am Bsp. cmd.exe



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

04.10.2013, 16:09
Beitrag #1

Frank M-F Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: Oct 2011

2011
2011
DE



WinAPI CreateProcess am Bsp. cmd.exe
Hallo,

ich möchte gerne aus LabVIEW heraus Prozesse mit der CreateProcess DLL starten.

Meine Versuche schlagen bisher fehl, obwohl zumindest auch schonmal ein Fenster aufgeploppt ist.
Vielleicht findet ja jemand den Knaxus.


Angehängte Datei(en)
11.0 .vi  Create_Process_Function.vi (Größe: 13,86 KB / Downloads: 328)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.10.2013, 21:57 (Dieser Beitrag wurde zuletzt bearbeitet: 04.10.2013 22:00 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: WinAPI CreateProcess am Bsp. cmd.exe
(04.10.2013 16:09 )Frank M-F schrieb:  Hallo,

ich möchte gerne aus LabVIEW heraus Prozesse mit der CreateProcess DLL starten.

Meine Versuche schlagen bisher fehl, obwohl zumindest auch schonmal ein Fenster aufgeploppt ist.
Vielleicht findet ja jemand den Knaxus.

Was hoffst Du damit zu erreichen, was Dir die eingebaute Funktion "System Exec" in LabVIEW nicht geben kann?
CreateProcess() is eine sehr kräftige Windows API Funktion, aber für sich alleine nicht sehr nützlich. Da braucht es noch einiges mehr drumherum, um etwas Sinnvolles damit machen zu können und das willst Du lieber nicht alles im LabVIEW Diagramm implementieren sondern lieber in einer DLL die Du in C(++) programmierst.

Zudem sind die zwei letzten Parameter von CreateProcess() Strukturen die zumindest für die erste nicht trivial auf LabVIEW Diagrammebene zu erstellen sind, da sie selber wieder Pointer enthalten. Auch der letzte Parameter der zwingend erforderlich ist um die Handles zum erzeugten Prozess zurückzugeben, ist nicht ganz einfach da die Handles je nach LabVIEW Bitness selber wieder 32 oder 64 Bit Werte sind. LabVIEW kennt aber keinen eigenen Datentyp der die Grösse abhängig von der eigenen Bitness verändert, so dass man ein VI schreiben müsste, das je nach LabVIEW Bitness eine andere Datenstruktur an die Call Library Node übergibt. Meiner Meinung nach einfach viel zu viele Trouble um auch nur in Betracht zu ziehen diese Funktion vom LabVIEW Diagramm aus aufzurufen, statt eine DLL zu schreiben die ein sinnvolleres LabVIEW kompatibles Interface zur Verfügung stellt.

Aber wie gesagt, System Exec macht alles was Du als normaler Benützer mit CreateProcess() tun kannst (und noch einige andere absolut notwendige Dinge darum herum) und diese ganze Fumelei erübrigt sich damit komplet.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.10.2013, 20:52 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2013 20:54 von Frank M-F.)
Beitrag #3

Frank M-F Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: Oct 2011

2011
2011
DE



RE: WinAPI CreateProcess am Bsp. cmd.exe
(04.10.2013 21:57 )rolfk schrieb:  Aber wie gesagt, System Exec macht alles was Du als normaler Benützer mit CreateProcess() tun kannst (und noch einige andere absolut notwendige Dinge darum herum) und diese ganze Fumelei erübrigt sich damit komplet.

Die System Exec gibt mir aber leider nicht die ProcessID für die gestartete Anwendung mit der ich gerne weiterarbeiten würde.

Wenn du einen Weg kennst, wie ich auch anders an diese komme, wäre mir schon etwas geholfen.

Der einzige Weg der mit bisher einfällt ist, dass ich nach dem Start der eigentlichen Anwendung nochmal "tasklist" ausführe und mir aus dem standart out per Stringkonvertierung die PID rausziehe.
Das finde ich aber reichlich unfein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.10.2013, 08:32
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: WinAPI CreateProcess am Bsp. cmd.exe
Hallo Frank,

was soll daran unfein sein, über einen Systembefehl die PID abzufragen?

Wie Rolf schon sagte: du kannst dich ins MSDN einlesen und dann in einem C(++)-Kompiler deiner Wahl eine DLL erstellen, die all das erledigt, was du brauchst, um diese dann mit LabVIEW aufzurufen. Oder du nutzt zwei vorgefertigte Funktionen (SystemExec, tasklist)...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.10.2013, 21:20 (Dieser Beitrag wurde zuletzt bearbeitet: 07.10.2013 21:24 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: WinAPI CreateProcess am Bsp. cmd.exe
(06.10.2013 20:52 )Frank M-F schrieb:  
(04.10.2013 21:57 )rolfk schrieb:  Aber wie gesagt, System Exec macht alles was Du als normaler Benützer mit CreateProcess() tun kannst (und noch einige andere absolut notwendige Dinge darum herum) und diese ganze Fumelei erübrigt sich damit komplet.

Die System Exec gibt mir aber leider nicht die ProcessID für die gestartete Anwendung mit der ich gerne weiterarbeiten würde.

Wenn du einen Weg kennst, wie ich auch anders an diese komme, wäre mir schon etwas geholfen.

Der einzige Weg der mit bisher einfällt ist, dass ich nach dem Start der eigentlichen Anwendung nochmal "tasklist" ausführe und mir aus dem standart out per Stringkonvertierung die PID rausziehe.
Das finde ich aber reichlich unfein.

Nun es gibt noch eine OpenG Pipe Library von mir die als Nebenprodukt auch ein Systemexec hat, wo schon ein PID zurückgegeben wird. Ist zwar nie releast aber als OpenG package downloadbar von hier und dann mit VIPM installierbar.

Aber Deine Lösung ist auch nicht verkehrt. Der Performancekiller ist ohnehin CreateProcess() was eine sehr teure Funktion ist in Windows, viel teurer als ein vergleichbares fork() unter Unix/Linux.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  WinAPI Aufruf funktioniert nicht unter Win7 Lessy2205 5 8.217 15.11.2011 13:03
Letzter Beitrag: Lessy2205
  Paralleles Abarbeiten während einer WinAPI-Funktion Almi 2 4.449 02.12.2009 08:47
Letzter Beitrag: Almi

Gehe zu: