2

Wir haben eine klassische Desktop-Anwendung unter Windows, die mit den Webbrowsern kommunizieren muss. Daher haben wir Webbrowser-Erweiterungen erstellt und verwenden die native Messaging-Technologie, um Nachrichten zwischen dem JavaScript auf einer Webseite und der nativen Desktop-Anwendung zu übergeben. Diese Art der Kommunikation wird derzeit in Google Chrome, Mozilla Firefox und Opera unterstützt. Nun möchten wir die gleiche Aufgabe in Microsoft Edge durchführen. Leider unterstützt Microsoft Edge natives Messaging anders als die anderen Browser. In Chrome/Firefox/Opera kann einfach eine serialisierte JSON-Zeichenfolge über stdin/stdout an eine native Messaging-Hostanwendung übergeben werden.MS Edge Extension mit Native Messaging auf Desktop-PC - UWP-App im Hintergrund ausführen/keine Benutzeroberfläche

Da Microsoft Edge eine universelle Windows-Plattform-Anwendung ist, unterstützt es nur die Kommunikation mit einer anderen UWP-App über AppService (und kommuniziert weiterhin mit unserer klassischen Desktop-Anwendung über FullTrustProcess). Unsere klassische Desktop-App kann aus vielen Gründen nicht in eine UWP-App konvertiert werden. Grundsätzlich ist das kein Problem, aber es gibt einige Probleme, die ich derzeit nicht lösen kann:

UWP Apps scheinen eine Benutzeroberfläche zu benötigen. Aber der Zweck der Erweiterung ist nur die Kommunikation, es ist keine Benutzeroberfläche vorgesehen.

So könnte ich einige Informationen über die UWP App/Edge Extension anzeigen, wenn der Benutzer die UWP App öffnet, aber wenn der Benutzer die App schließt (zB durch Klicken auf die (X) Taste), wird der UWP App Prozess beendet das System. Wenn dies während eines Kommunikationsprozesses geschieht, wird die native Messaging-Kommunikation unterbrochen und der Benutzer erhält einen Fehler. Bisher habe ich noch keinen Weg gefunden dies zu vermeiden. Wenn Microsoft Edge die UWP-App startet (initiiert durch "runtime.connectNative" im Hintergrund-JavaScript-Code der Erweiterung), wird sie im Hintergrundmodus ausgeführt und beendet, wenn Microsoft Edge beendet wird, was OK ist. Aber wenn der Benutzer die App öffnet (z. B. über das Startmenü), wird der Prozess für die App wiederverwendet und läuft nun im Vordergrundmodus. Und wenn die Benutzeroberfläche der App vom Benutzer geschlossen wird, wird der ursprünglich von Microsoft Edge gestartete Prozess beendet. Ich habe das offizielle "ExtendedExecution" -Beispiel von Microsoft angeschaut, das verhält sich aber genauso.

  • Gibt es eine Möglichkeit, die UWP-App im Hintergrundmodus statt im Terminmodus zu senden, wenn der Benutzer die Benutzeroberfläche der App schließt? Damit die App wie bisher im Hintergrundmodus weiterlaufen kann?
  • Oder gibt es eine Möglichkeit, die Benutzeroberfläche im OnLaunched-Ereignis auszublenden (z. B. wird dann unsere klassische Desktop-App geöffnet und der Benutzer kann die UWP-App jetzt nicht mehr manuell schließen)?
  • Wahrscheinlich kann ich die HWND der UWP-App von unserer nativen Desktop-App finden und einige hässliche Hacks damit durchführen, aber ich möchte das auf jeden Fall vermeiden.

    Grüße, Dominik

    Antwort

    0

    Es gibt Hintergrundaufgaben in UWP https://docs.microsoft.com/en-us/windows/uwp/launch-resume/support-your-app-with-background-tasks

    Auch werden Sie in dieser Einstellung 'AppListEntry' in package.appxmanifest Datei interessiert. Damit ein Link zu Ihrer Anwendung erscheint nicht in Startmenü

    <Applications> 
        <Application Id="id" Executable="$targetnametoken$.exe" EntryPoint="entrypoint.App"> 
         <uap:VisualElements AppListEntry="none" .../> 
    

    ...

    +0

    Thank you! Einstellung 'AppListEntry =" none "' tut genau das, was ich will, damit der Benutzer die Anwendung nicht mehr direkt starten kann. – dominik

    +0

    Es besteht jedoch immer noch die Möglichkeit, dass der Benutzer die Anwendung startet, wenn er die geladene appx-package-Seite installiert und dann den "Starten" -Button des Paketinstallationsdialogs drückt. – dominik

    +0

    Wenn Sie eine App vom Windows Store aus starten und diese App eine Erweiterung ist, wird Edge gestartet. Sie sollten den Einstiegspunkt im Manifest leer lassen, damit er funktioniert. – 2Jura5

    Verwandte Themen