Windows 11 Shell execute

  • VB6

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mabbi.

    Windows 11 Shell execute

    Hallo,

    ich habe ein Problem mit shell execute und Windows 11

    In einem VB6 Projekt muss ich von Zeit zu Zeit grössere Migrationen oder Datenbank-Updates durchführen.
    Damit der Anwender (mit EInschränkung der betroffenen Bereiche) weiter die App nutzen kann, starte ich im folgende Falle die Anwendung ein 2. mal (aus der Hauptanwendung) mit einem Befehlszeilenparameter:

    Visual Basic-Quellcode

    1. ShellExecute Hauptmenu.hWnd, "Open", "xxxxxx.exe", "/MIGRATE", App.Path, 1


    Das funktioniert bis WIndows 10 auch einwandfrei.
    Unabhängig davon, ob die Hauptanwendung noch läuft oder mittlerweile geschlossen wurde bleibt die /MIGRATE sichtbar und kann am Ende manuell geschlossen werden.

    Nun habe ich mit WIndows 11 folgendes Problem:
    Sollte der Anwender die Hauptanwendung(aufrufende) schliessen bevor die Migration beendet ist, so werden alle Forms der /MIGRATE .exe unsichtbar.
    Im task-manager verschwinden alle Verweise auf die xxxxxx.exe aus dem apps-Bereich und man sieht nur unter Hintergrundprozesse noch eine xxxxxx.exe laufen (welches die /MIGRTAE .exe ist).
    Jegliche "sichtbare" Spur der Anwendung auf dem Desktop ist verschwunden, auch von der Anwendung neu aufgerufene Fenster bleiben unsichtbar.
    Allerdings läuft die app bis zum Ende durch (sehe ich z.B. in der Datenbank, wie am Ende Einstellungen in die Versions-Tabelle geschrieben werden, auch alle Daten migirieren sauber durch) und bleibt dann in der unsichtbaren manuellen Beenden-Abfrage auf ewig hängen, wenn man den Hintergrundprozess nicht manuell tötet im task-manager oder den Rechner neu startet.

    Hierzu nun 2 Fragen:
    - gibt es einen Parameter im shell execute, um das parent-child Verhältnis zu umgehen und die /MIGRATE xxxxxx.exe als eigenständige app zu starten ?
    - hat jemand alternative Idee, dieses Problem zu lösen ?

    Info:
    Die Sourcen sind z.T. über 30 Jahre alt, es ist eine Software die in der sogenannten systemkritischen Infrastruktur läuft und mangels von .net nicht mehr unterstützten Komponenten/Verweise ist eine Umsetzung auf .net o.ä. nicht möglich.
    Es ist leider keine Option hier in irgendeiner Form auf ein modernes framework zu wechseln, neu coden fällt aufgrund der Größe des Projekts und fehlender hardware Unterstützung auch aus.

    Vielen Dank vorab für Eure Antworten.

    MfG Mabbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mabbi“ ()

    Ohne es ausprobiert zu haben, würde ich zunächst einfach mal das Hauptmenu.hWnd weglassen und testen. Du müsstest nur schauen, welcher Nullwert möglich ist. Ich vermute, einfach die Zahl 0.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi,

    vielen Dank für die Tipps.

    Habe nun folgendes gemacht zum Testen:

    Declare Function GetDesktopWindow Lib "user32" () As Long

    ...

    ' Original
    ShellExecute Hauptmenu.hWnd, "Open", "xxx.exe", "", App.Path, 1
    ' Test mit 0
    ShellExecute 0, "Open", "xxx.exe", "", App.Path, 1
    'Test mit GetDesktopWindow
    ShellExecute GetDesktopWindow, "Open", "xxx.exe", "", App.Path, 1

    GetDesktopWindow gibt nicht 0 zurück, also bin ich optimistsch.
    Auf Windows 10 gehen wie erwartet alle 3 Fenster als eigne App auf, beide Eurer neuen Vorschläge funktionieren also.
    Auf WIndows 11 kann ich voraussichtlich am Freitag diese Woche testen. Ich gebe dann hierzu Rückmeldung.

    greetz....Mabbi