LabVIEWForum.de - System Exec

LabVIEWForum.de

Normale Version: System Exec
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe hier ein Problem das ich nicht richtig verstehe.
Ich möchte dieses Script mit der Funktion System Exec unter LV18SP2 (32bit) ausführen.

powershell -command "Start-Process 'c:\windows\system32\wintest.bat' -Verb runAs
Da kann ich machen was ich will das klappt nicht. Ich bekomme die Fehlermeldung das die wintest.bat nicht gefunden wird.

Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgefhrt werden: Das System kann die
angegebene Datei nicht finden.

Wenn ich aber das gleiche Script mit lv18_img SP2 (64bit) ausführe läuft das script ohne Probleme.

Als Betriebssystem habe ich verwende Win10

Hat wer eine Erklärung dafür?

Gruß Hubert
Das Problem ist, dass Windows 32 bit Anwendungen automatisch nach SysWOW64 umleitet, wenn sie etwas in system32 aufrufen wollen.

NI hat einen Knowledgebase Artikel dazu: https://knowledge.ni.com/KnowledgeArticl...0019L4VSAU

Siehe auch Wikipedia dazu: https://de.wikipedia.org/wiki/WOW64

Schlussendlich musst du aus der 32 bit Anwendung heraus den Ordner sysnative statt system32 im Pfad benutzen.
Hallo Cordm,

danke für dein feedback. Ich habe heute morgen einiges ausprobiert aber nichts klappt.

Vielleicht kann du nochmals dir das Vi (lv18_img-32bit) ansehen ob ich denkfehler mache oder das exec Vi falsch bediene.

Gruß Hubert
Ich glaube das Problem ist, dass das falsche cmd.exe aufgerufen wird. Ganz verstanden habe ich es aber noch nicht.

Mit diesem Kommando funktioniert es bei mir:

C:\Windows\Sysnative\cmd.exe /c winsat.exe mem
Hallo cordm,

Wenn ich es so in lv18_img ausführe bekomme ich die LV-Fehlermeldung 2 „Memory is full…“

Wenn man LV installiert wird gewöhnlicherweise auf dem Desktop das Icon mit dem LV-Symbol und Version angezeigt.
Wenn ich nun einen rechts click drauf mache kann ich unter Eigenschaften – erweitert- als Admin ausführen auswählen.

Wenn ich dann das Vi mit deinem Kommando laufen lasse funktioniert es auch.

Ich werde von diesem Vi mal eine Exe machen und diese als admin starten, mal schauen was dann passiert.

Soweit erstmal vielen Dank an dich.

Gruß Hubert
Hallo Hubert,

das mit der Umleitung der Verzeichnisse kann manchmal etwas schwierig sein, weil oft nicht klar ist, was im Hintergrund wirklich passiert.
Beispiel: Während
cmd /c %windir%\Sysnative\msg.exe /server:localhost * test
funktioniert, geht der Befehl
cmd /c %windir%\Sysnative\osk.exe
nicht.

Das "cmd /c" welches du vorangestellt hast, macht die Sache nicht einfacher.

Letztendlich geht es aber oft erst mal darum, den Befehl richtig auszuführen und ggf. dessen Antwort korrekt auszuwerten.

Nun gibt es auch noch eine andere Lösung als das Sysnative. Microsoft rät zwar davon ab, weil es die Umleitung für den Thread außer Kraft setzt. Das sollte zumindest nicht für Befehle verwendet werden, die eine längere Laufzeit haben und insbesondere dann nicht, wenn du parallel dazu etwas aus SysWOW64 ausführen möchtest.

siehe [attachment=62906]

Link von MS zu den API Funktionen

Damit funktioniert
cmd /c "c:\windows\System32\winsat.exe mem"

oder besser
c:\windows\System32\winsat.exe mem

und genauso problemlos funktionieren Aufrufe von osk.exe und msg.exe und alle möglichen andere Programme.

Um eine Aufruf mit Sysnative kannst du dich ggf. später kümmern, wenn du sicher bist, dass der Aufruf keine anderen grundsätzlichen Fehler mehr enthält.
Hallo cordm,

nachdem ich mal ein ausführbares Programm erstellt habe muss ich folgendes feststellen.
Beim Ausführen der exe öffnen sich 2 Konsolen (s. Bild) das Kommando wird scheinbar ausgeführt aber ich bekomme kein Ergebnis (standard output) angezeigt.
Es gibt scheinbar keinen Unterschied ob ich die .exe als Admin ausführe oder nicht.
Auch die Vergabe von entsprechenden Rechten für die .exe hat keinen Erfolg gebracht.
Ich muss aber sagen in der LabVIEW Entwicklungsumgebung als Admin gestartet hat es funktioniert.

Hallo Martin,

Dein sys… .vi habe ich auch ausprobiert. In der Labview Entwicklungsumgebung als Admin gestartet
funktionieren beide Aufrufe also cmd /c "c:\windows\System32\winsat.exe mem" und c:\windows\System32\winsat.exe mem.

Wenn ich nun ein ausführbares Programm (exe als admin gestartet) verwende funktioniert dieser Aufruf nicht: cmd /c "c:\windows\System32\winsat.exe mem".
Ich bekomme wie bei cordm kein Ergebnis zurück. Wenn ich noch eine Umleitung (> C:\Users\Public\.....) an den Aufruf hänge wird das File angelegt ist aber leer.

Aber der zweite Aufruf (exe als admin gestartet) c:\windows\System32\winsat.exe mem verwende Funktioniert alles.

Das hat mich sehr gefreut!

Vielleicht helfen die beiden unterschiedlichen Ansätzen jemand ich der Zukunft weiter.

Nochmals vielen Dank an euch beide.
Referenz-URLs