![]() |
ShellExecute, Batch über runas starten
Hallo,
ich habe ein kleines Problem. Ich nutze eine kleine Updateroutine in einem alten programm, mit der ich aus einem .\ProgrammData\Aust\Updates Verzeichnis aktuelle DLL-Dateien in mein Applicationsverzeichnis Programm\... kopieren möchte. Da ich hierzu ab WIN 7 Adminrechte benötige starte ich den Batch aus meiner Anwendung mit anliegendem Befehl.
Code:
Es erscheint auch der Hinweis, ob das Programm Änderungen vornehmen darf, allerdings werden die Dateien nicht kopiert.
ShellExecute(handle, 'runas', PCHAR(batch_ruf), PCHAR(batch_par),
PCHAR(Aust.data_verzeichnis + 'Updates'), SW_HIDE); Wie bekomme ich es hin, dass ich über einen Batchaufruf, aus meinem Programm heraus, die Dateien kopiert bekomme, was muss ich tun um die entsprechenden Rechte zu bekommen?. Bis XP lief dies alles gut, seit win7 nicht mehr. |
AW: ShellExecute, Batch über runas starten
Was steht in den Variablen drin? Wie sieht die Batch aus?
MfG Dalai |
AW: ShellExecute, Batch über runas starten
Hallo,
Code:
Die Batch sieht wie folgt aus
batch_ruf := Auc.data_verzeichnis + 'updates\AucUpd.bat';
batch_par := ExtractFilePath(Application.ExeName); ShellExecute(handle, 'runas', PCHAR(batch_ruf), PCHAR(batch_par), PCHAR(Auc.data_verzeichnis + 'Updates'), SW_HIDE);
Code:
@echo off
:s del %1AucTool.exe if exist %1AucTool.exe goto s copy AucTool.exe %1AucTool.exe copy Auc1.dll %1Auc1.dll copy Auc2.dll %1Auc2.dll del AucTool.exe cd %1 AucTool.exe exit |
AW: ShellExecute, Batch über runas starten
Was gibt denn das ShellExecute zurück? Und was tut das Batchfile, wenn du ans Ende (vor das exit) mal ein "pause" setzt und es nicht versteckt ausführen lässt?
Davon abgesehen ist die Batch fehleranfällig. Ich korrigiere mal etwas:
Code:
Sich darauf zu verlassen, dass
@echo off
if "%~1"=="" goto :EOF set "at=%~1AucTool.exe" :s del "%at%" if exist "%at%" goto s copy "%~dp0AucTool.exe" "%at%" copy "%~dp0Auc1.dll" "%~1Auc1.dll" copy "%~dp0Auc2.dll" "%~1Auc2.dll" del "%~dp0AucTool.exe" call "%at%" exit
MfG Dalai |
AW: ShellExecute, Batch über runas starten
Hallo,
danke für die Anpassungsempfehlung. Ich bekomm es trotzdem nicht nicht hin. Sobald RunAs gesetzt ist wird die Batch nicht mehr aufgerufen. |
AW: ShellExecute, Batch über runas starten
Zitat:
Code:
Sinnvollerweise gibt man auch hier den vollen Pfad zur cmd.exe und zur Batch an.
cmd.exe /c "x:\pfad\zur\batch"
MfG Dalai |
AW: ShellExecute, Batch über runas starten
Hmmm,
keine Ahnung warum aber cmd ruft er, auch mit komplettem Pfad nicht auf... Dennoch Danke .. Ich glaube ich muss mir unter Win >=7 ne neue Strategie zum Austausch der Dateien ausdenken. |
AW: ShellExecute, Batch über runas starten
Zitat:
MfG Dalai |
AW: ShellExecute, Batch über runas starten
Hallo,
OK, ich hab's jetzt doch noch mit einigen Anpassungen hinbekommen. Eine Ursache war, dass ich den Parameter /C im 3 Parameter mit dabei hatte, also PChar('cmd.exe /C') hieß. Shellexecute lief dann mit Error 2 (kann Datei nicht finden) auf Fehler. Wichtig sind auch die entsprechenden "" weil auf diese Weise die Parameter getrennt werden müssen (Langer Dateiname mit eventuellen Leerzeichen). Ein weiterer Fehler war, dass beim Aufruf der Batch mit CMD, das aktuelle Verzeichnis auf c:\windows\system32 verweist. Übergebe hier das richtige Verzeichnis als 2ten CMD-Parameter, könnte man sicher auch in der Batch abfangen .... Mit anliegendem Aufruf funktioniert es.
Code:
lässt sich sicher optisch noch verbessern, aber es funktioniert. Nochmals Danke für die Impulse.Temp_Vz := 'c:\tmp\Update\' ShellExecute(handle, 'runas', PCHAR('cmd.exe'), PCHAR('/C ""'+Temp_Vz+'A_Upd.bat" '+batch_par+' "'+Temp_Vz+'""' ), PCHAR('"'+Temp_Vz+'"'), SW_HIDE); ergänzende Info über ![]() |
AW: ShellExecute, Batch über runas starten
Zitat:
Zitat:
Zitat:
![]() ![]() MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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 by Thomas Breitkreuz