Mit diesen Code kann ich ein Executable starten und warten bis es beendet wird. Funktionierte über die Jahre problemlos. Nun aber nach dem Umstieg auf Windows 10 funktioniert der Code nicht immer.
Delphi-Quellcode:
if CreateProcess(
nil,
'calc.exe', // 'notepad.exe'
nil,
nil,
FALSE,
prio,
nil,
working,
StartupInfo,
ProcessInfo) then
begin
repeat
res := MsgWaitForMultipleObjects(1, // one event to wait for
ProcessInfo.hProcess, // the array of events
False, // wait for 1 event
INFINITE, // timeout value
QS_ALLINPUT); // any message wakes up
if res <> WAIT_OBJECT_0 then
begin
m.Message := 0;
while PeekMessage(m, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(m);
DispatchMessage(m);
Application.ProcessMessages;
end;
Sleep(50);
end;
until res = WAIT_OBJECT_0;
end;
Zum Beispiel funktioniert es mit notepad.exe, jedoch nicht mit dem Windows Taschenrechner calc.exe. Da steigt der Code sofort aus, auch wenn das Fenster von calc.exe noch da ist. Ich habe mir die Sache genauer angeschaut und es liegt wohl daran dass calc.exe nur ein Wrapper ist um die Windows Metro app zu starten. Der Wrapper-Prozess beendet sich sofort.
Kennt jemand eine Alternative die auch mit Windows Metro Apps funktioniert?