Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   calc.exe unter Win 10 starten und auf beenden warten (https://www.delphipraxis.net/189013-calc-exe-unter-win-10-starten-und-auf-beenden-warten.html)

Shark99 26. Apr 2016 11:48

calc.exe unter Win 10 starten und auf beenden warten
 
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?

Rollo62 26. Apr 2016 20:37

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Hilft dir das weiter ?

http://www.baronsoftware.com/Blog/de...l-application/
http://www.vbforums.com/showthread.p...-in-Windows-10

Rollo

Shark99 29. Apr 2016 12:51

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Danke, aber die beide Links haben nichts mit dem Problem zu tun.

Sunec 29. Apr 2016 15:16

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Der Rechner trägt unter Windows 10 den namen Calculator.exe

Luckie 29. Apr 2016 15:19

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Dann hätte er aber eine Fehlermeldung zurückbekommen müssen, die ihm sagt, dass die Datei nicht gefunden wurde. :roll:

t.roller 29. Apr 2016 16:27

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Folgende Aufrufe sind bei WINDOWS 10 64Bit richtig:
C:\Windows\System32\calc.exe
C:\Windows\SysWOW64\calc.exe

Daniel 29. Apr 2016 16:42

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Das ist richtig, ändert aber nichts daran, das die beiden calc.exe-Dateien nur Wrapper sind, die ihrerseits "calculator.exe" aufrufen und sich sofort beenden.
Der Prozess, der am Ende läuft, liegt hier unter "C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1 601.49020.0_x64__8wekyb3d8bbwe\calculator.exe".

Daniel 29. Apr 2016 16:52

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Das riecht ein wenig nach Aufwand, doch in diesem Zusammenhang wird auf die Job-API von Windows verwiesen. Ein "Job" ist - bildlich gesprochen - eine Hülle um einen Prozess, den Du startest. Sollte dieser Prozess weitere Unterprozesse starten, sind sie automatisch Teil des Jobs. Mittels WaitForSingleObject() kannst Du dann in gewohnter Weise darauf warten, bis alle Prozesse des Jobs beendet sind.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Shark99 29. Apr 2016 21:32

AW: calc.exe unter Win 10 starten und auf beenden warten
 
Danke Daniel, ich schaus mir an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz