![]() |
AW: Too stupid to execute and wait
Zitat:
Ich bin in sachen Windows API relativ unbeleckt! Und hoffte eigentlich was fertiges zu finden was einfach einen Prozess startet und wartet bis er fertig ist! Der code hat mit Kommandlinetools auch super hingehauen. (gsecexe, Isql.exe) |
AW: Too stupid to execute and wait
Zitat:
Zitat:
Ich will das NUR sfx.exe im Waitforsingleobject hängt aber nicht setup.exe im splashscreen. |
AW: Too stupid to execute and wait
Änderungen eingebaut...wie zu erwarten selbes problem...
änderungen im startpost veröffentlicht. WaitForSingleObject wartet bis das Prozesshandle ungültig wird oder? Wieso hängt der überwachte Prozess wenn er überwacht wird? |
AW: Too stupid to execute and wait
Funktioniert wunderbar:
Delphi-Quellcode:
uses
ShellAPI; procedure ExecAndWait(Filename, Params: Widestring; WindowState: word = SW_SHOWNORMAL); var ShExecInfo: SHELLEXECUTEINFOW; const SEE_MASK_NOASYNC= $100; begin ZeroMemory(@ShExecInfo, SizeOf(ShExecInfo)); ShExecInfo.Wnd := GetForegroundWindow; ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFOW); ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC; ShExecInfo.lpVerb := 'open'; ShExecInfo.lpFile := PWideChar(Filename); ShExecInfo.lpParameters := PWideChar(Params); ShExecInfo.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename))); ShExecInfo.nShow := WindowState; if ShellExecuteExW(@ShExecInfo) then begin WaitForSingleObject(ShExecInfo.hProcess, INFINITE); CloseHandle(ShExecInfo.hProcess); end else RaiseLastOSError; end; procedure TForm1.Button1Click(Sender: TObject); begin try ExecAndWait('C:\Windows\Notepad.exe', ''); except on E: Exception do ShowMessage(E.Message); end; ShowMessage('Fertig'); end; |
AW: Too stupid to execute and wait
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
. Diesen WideString würdest du an eine Struktur übergeben die für AnsiString gedacht ist. Das wäre ein potenzieller Fehler.
'open'
Warum dein aufgerufenes Programm trotzdem hängt weiß ich nicht. Das ist komisch. Funktioniert der Code mit notepad - bzw. einem Programm dass du nicht selber geschrieben hast? (siehe Luckie) Gruß, Chris |
AW: Too stupid to execute and wait
Zitat:
mit isql.exe geht es und mit gsec.exe geht es auch Aber mit meiner setup.exe ist nach dem Splashscreen Schluss. Warum? |
AW: Too stupid to execute and wait
Zitat:
Zitat:
hat jemand ne idee warum er bei setup.exe nur bis zum splashscreen kommt?? |
AW: Too stupid to execute and wait
Zitat:
Delphi-Quellcode:
Ich würde es so versuchen (Deine Sourcen angepasst):
ShExecInfo.lpVerb := 'open';
Delphi-Quellcode:
uses
ShellAPI; procedure ExecAndWait(Filename, Params: string; AHWnd: HWND; WindowState: word = SW_SHOWNORMAL); var ShExecInfo: SHELLEXECUTEINFO; const SEE_MASK_NOASYNC= $100; begin ZeroMemory(@ShExecInfo, SizeOf(ShExecInfo)); ShExecInfo.Wnd := AHWnd; ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC; ShExecInfo.lpVerb := 'open'; ShExecInfo.lpFile := PChar(Filename); ShExecInfo.lpParameters := PChar(Params); ShExecInfo.lpDirectory := PChar(ExtractFileDir(Filename)); ShExecInfo.nShow := WindowState; if ShellExecuteExW(@ShExecInfo) then begin WaitForSingleObject(ShExecInfo.hProcess, INFINITE); CloseHandle(ShExecInfo.hProcess); end else RaiseLastOSError; end; procedure TForm1.Button1Click(Sender: TObject); begin try ExecAndWait('C:\Windows\Notepad.exe', '', Self.Handle); except on E: Exception do ShowMessage(E.Message); end; ShowMessage('Fertig'); end; Zitat:
Gruß, Chris |
AW: Too stupid to execute and wait
Wo mische ich? Ich habe nur Delphi 7 hier, deshalb habe ich ausdrücklich WideStrings benutzt.
|
AW: Too stupid to execute and wait
Zitat:
über all das selbe Verhalten nur das es bei Windows 7 erst mit Adminrechten überhaupt in den Splashscreen kommt. Ich testete dioe letzen paar minuten hier auf einer Windows 2000 virtuellen maschiene... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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-2025 by Thomas Breitkreuz