Hallo,
ich stehe etwas auf dem Schlauch..
Wenn ich mit shellExecute eine bat Datei starten will dann funktioniert das so:
Delphi-Quellcode:
parameter := format('
%s',['
einige Parameter']);
if shellExecute(
handle,
nil,pchar('
start_tool.bat'),pChar(parameter),
nil,SW_SHOW) <= 32
then
begin
fLogger.addItem(format('
start_tool.bat %s',[parameter]),0);
fLogger.addItem(sysErrorMessage(getLastError),0);
end;
Die Datei start_tool.bat liegt in gleichen Verzeichnis wie die exe.
Nun möchte ich aber shellExecuteEx verwenden.
Ich möchte die gestartete Datei überwachen.
Delphi-Quellcode:
parameter := format('
%s',['
einige Parameter']);
shellExeInfo.cbSize := sizeOf(TShellExecuteInfo);
shellExeInfo.Wnd :=
handle;
shellExeInfo.lpVerb := '
open';
shellExeInfo.lpFile := pchar('
start_tool.bat');
shellExeInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
shellExeInfo.lpParameters := pChar(parameter);
shellExeInfo.lpDirectory := pChar(extractFileDir(paramStr(0)));
shellExeInfo.nShow := SW_SHOW;
if not shellExecuteEx(@shellExeInfo)
then
begin
fLastError := getLastError;
fLogger.addItem(sysErrorMessage(fLastError)+'
['+intToStr(fLastError)+'
]',0);
fReturnValue := 3;
end
else
begin
try
repeat
waitState := MsgWaitForMultipleObjects(1,shellExeInfo.hProcess,false,INFINITE,QS_ALLINPUT);
if waitState <> WAIT_OBJECT_0
then
sleep(250);
until waitState = WAIT_OBJECT_0;
finally
closeHandle(shellExeInfo.hProcess);
end;
end;
Nur erhalte ich damit immer die Fehlermeldung "
Access denied" ErrorCode 5.
Und ich weiß nicht warum?
Jemand eine Idee?
Grüße
Klaus