![]() |
Starten einer Batch mit Shellexecute
Hallo zusammen!
Ich habe ein Problem beim Starten einer Batch mit Shellexecute. So sieht der Code aus:
Delphi-Quellcode:
Wie man sieht, habe ich es mit zwei Varianten getestet (eine ist gerade auskommentiert).
procedure Open_Devcon;
var PioEA,Pio_ein,Pio_aus,Devcon_path:string; begin PioEA:='c:\Users\TF\Delphi\Devcon\WDK7.1.0\DisEnPIO.bat'; showmessage(IntToStr(shellExecute(0, 'open', 'cmd', 'PChar(PioEA)', nil, SW_SHOW))); { showmessage(IntToStr(shellExecute(0, 'runas', 'PWideChar(PioEA)', nil, nil, SW_SHOW))); } Die gerade aktive Variante mit 'CMD' öffnet das CMD-Fenster, führt aber die Batch nicht aus. Shellexecute gibt hier eine 42 zurück. Interessanter Nebeneffekt: Gebe ich im noch offenen CMD-Fenster, das aus Delphi gestartet wurde, die Befehle der Batch bzw. die Batch selbst von Hand ein, wird das Programm aus der Batch bzw. die Batch nicht gefunden! Öffne ich ein neues CMD-Fenster und mache das gleiche, funktioniert es! Starte ich die Batch direkt oder über einen Link - funktioniert es. Die auskommentierte Variante startet die Batch garnicht und Shellexecute gibt eine 2 zurück. Die Pfade stimmen aber - mehrfach geprüft. Ich habe auch schon versucht, die Batch über einen Link zu starten. Hat aber auch nicht funktioniert. Hier noch der Inhalt der Batch-Datei: start /wait c:\Windows\System32\devcon disable USB\VID_09CA* start /wait c:\Windows\System32\devcon enable USB\VID_09CA* Die Batch startet über DEVCON ein USB-Device neu (was manchmal abstürzt, da es durch das Schalten großer Relais gestört wird). Hat da jemand eine Idee dazu bzw. wie ich mein USB-Device per Software wieder aktivieren kann, ohne dass der Bediener etwas machen muss (soll im Hintergrund laufen)? Danke! Frank |
AW: Starten einer Batch mit Shellexecute
Vielleicht funktionier dies?
Delphi-Quellcode:
Grüße
var
shellExecuteInfo: TShellExecuteInfo; filePath := 'c:\Users\TF\Delphi\Devcon\WDK7.1.0\' parameter := ''; ZeroMemory(@shellExecuteInfo, SizeOf(TShellExecuteInfo)); shellExecuteInfo.cbSize := sizeOf(TShellExecuteInfo); shellExecuteInfo.hwnd := 0; shellExecuteInfo.lpVerb := 'open'; shellExecuteInfo.lpFile := pchar('DisEnPIO.bat'); shellExecuteInfo.fMask := SEE_MASK_NOCLOSEPROCESS; shellExecuteInfo.lpParameters := pChar(parameter); shellExecuteInfo.lpDirectory := pChar(filePath); shellExecuteInfo.nShow := SW_HIDE; if not shellExecuteEx(@shellExecuteInfo) then showMessage(IntToStr(getLastError)); Klaus |
AW: Starten einer Batch mit Shellexecute
ShellExecuteEx ist dafür nicht nötig.
Aber das PChar(PioEA) sollte wohl eher kein String sein (Die Anführungszeichen müssen weg) |
AW: Starten einer Batch mit Shellexecute
Handelt es sich dabei um einen Windows 2008-Server? Bei dem funktioniert in der Aufgabenplanung das direkte Starten einer Batch nicht, dort muss man die cmd.exe mit der Batch als Parameter starten. Dürfte bei Windows 7 auch auftreten. Vielleicht funktioniert das für dich:
![]() |
AW: Starten einer Batch mit Shellexecute
Zitat:
|
AW: Starten einer Batch mit Shellexecute
Warum kommt keiner auf die Idee das arme CMD mal zu fragen, warum es nicht will?
Ausführen > CMD >
Delphi-Quellcode:
CMD /?
PS: Mit sowas wie ShellExecuteAndWait (ShellExecuteEx) kann man devcon.exe auch direkt ausführen. (wegen dem Warten, sonst auch direkt per ShellExecute ohne CMD oder Batch drumrum) |
AW: Starten einer Batch mit Shellexecute
Da fehlt aber dann beim Parameter ein /c vor der Batch. Ansonsten geht nur eine cmd auf und tut nix. Kann man einfach auch so testen.
also:
Delphi-Quellcode:
PioEA:='/c c:\Users\TF\Delphi\Devcon\WDK7.1.0\DisEnPIO.bat';
Siehe auch hier: ![]() |
AW: Starten einer Batch mit Shellexecute
Zitat:
Aber wenn es mit .bat Probleme gibt, dann nehmt einfach das (neuere) .cmd, mit selben Inhalt, bzw. auf Windows Server auch gern mal mit PowerShell rumspielen. :angle: |
AW: Starten einer Batch mit Shellexecute
Zitat:
|
AW: Starten einer Batch mit Shellexecute
Bei meinem Schlepptop ist irgendwann mal die Verknüpfung für .bat kaputt gegangen.
.bat werden im Notepad geöffnet, aber nicht ausgeführt ... k.A. was da paputt ist. Doppelklick im Explorer und ShellExecute auf .bat, ohne CMD davor, gehen da auch nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz