Programme durch den Browser starten

Im Bereich des Service-Desks setzen wir eine Reihe an Web-basierten Tools ein, allem voran die Helpdesk-Lösung OTRS.

Ziel war es jetzt, Werkzeuge, die nicht im Browser, sondern als eigenständiges Programm laufen, in diese Web-Umgebung zu integrieren. Die Aufgabe bestand also darin, den Browser ein weiteres Programm, eine exe, starten zu lassen.

Aus naheliegenden Gründen geht das nicht ohne weiteres. Alle Browser haben Sicherheitsmechanismen eingebaut, die den Start von Executables verhindern.

Verwendung von ActiveX

Unser erster Ansatz war, mit Hilfe von JavaScript ein ActiveX-Control zu erzeugen, welches dann wiederum das gewünschte Programm startet. Das folgende JavaScript leistet das Gewünschte:

<script language="JScript">// <![CDATA[
function StartProgramm(Parameter) {
  // Parameter zusammenbauen
  var Parameter = "-foo -bar " + Parameter

  // Erzeugen des ActiveX Objekts
  var WshShell = new   ActiveXObject("WScript.Shell");

  // gewünschtes Programm starten
  WshShell.Run("c:\\Programme\\Anwendung\\Programm.exe " + Parameter );
}
// ]]></script>

Mit einem Knopf in der Webseite kann das gewünschte Programm dann gestartet werden:


Der Nachteil dieser Methode liegt darin, dass sie ausschließlich im Internet Explorer funktioniert, da nur dieser die ActiveX-Technologie unterstützt. Außerdem verhindert das Standard-Sicherheitsmodell zunächst einmal die Ausführung, die Sicherheitseinstellungen müssen angepasst werden.

Erzeugung eines eigenen Protokoll-Handlers

Als 2. Möglichkeit haben wir uns die sogenannten „Protokoll-Handler“ angesehen. Die Windows-Shell ermöglicht es, eigene Protokolle zu definieren, mit denen sich Programme mit einer URL-ähnlichen Syntax starten lassen. Das bekannteste Beispiel ist sicherlich der „http“-Handler, der dafür sorgt, dass es genügtunter,  Start->Ausführen eine URL einzugeben, um den Standard-Browser mit dieser URL zu starten.

Um einen Protokoll-Handler zu installieren, genügt es, diesen in der Registry einzutragen. Am einfachstenkann man das mit einer .reg-Datei mit einem Inhalt ähnlich dem folgendden erledigen:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\foo]
@="URL:foo Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"C:\\Programme\\Anwendung\\Programm.exe\" \"%1\""

Nachdem die Einträge in der Registry kann der Aufruf unter Start->Ausführen getestet werden: Indem man in die Box „foo:bar“ eingibt, wird das angegebene Programm gestartet.

Dies funktioniert nun auch im Browser: Mit einem Link lässt sich das lokal registrierte Programm starten.

Programm starten

Diese Technik funktioniert mit allen gängigen Browsern. Nachteil ist, dass dem Programm als Parameter die gesamte „URL“ übergeben wird, in unserem Beispiel wäre das also der komplette String foo:bar, und nicht nur der eigentliche Parameter bar. Aus diesem Grund haben wir einen Wrapper geschrieben, der das eigentliche Programm startet. Unsere Wahl fiel dabei auf AutoHotkey, da für die hierbei erzeugten Executables keine weitere Runtime mehr benötigt wird. Ein beispielhaftes AHK-Skript sieht dann so aus:

; Parameter aus der Befehlszeile abholen
parameter = %1%

; Protokoll-Handler (hier: foo:) entfernen
StringReplace, parameter, parameter, foo:

; Remote Control starten
run programm.exe -foo -bar %parameter

Mit dieser Methode funktioniert die Integration der benötigten Werkzeuge (z.B. PC-Fernwartung) in den Web-Arbeitsplatz browserübergreifend und mit den geringsten Eingriffen in die lokale Installation.

Mehr zu dieser Methode in der MSDN und im MozillaZine.

19 Antworten auf „Programme durch den Browser starten“

  1. Funbktioniert nach zwei kleinen Anpassungen.

    Im AHK-Skript muss ein Prozent-Zeichen ans Ende der Zeile:
    ; Remote Control starten
    run programm.exe -foo -bar %parameter%

    Und im Registry Entrag fehlt ein Anführungszeichen am Ende der Zeile:
    [HKEY_CLASSES_ROOT\foo\shell\open\command]
    @=“\“C:\\Programme\\Anwendung\\Programm.exe\“ \“%1\““

    Sonst echt super, man findet an anderen Stellen meist nur was alles nicht geht. DANKE!!

    Gruß Heiko

    1. Hallo Heiko
      Ich bin auch schon sehr lange auf der Suche nach einer Möglichkeit durch den Browser eine .exe-Datei zu starten.
      Nun stieß ich durch Zufall auf diese Webseite (Jörgs Blog).
      Wie ich deinem Kommentar entnehmen konnte, bist du mit der Sache klar gekommen. Ich leider nicht denn ich bin weiß Gott kein Profi.
      Wäre es möglich Heiko, dass du mir ein wenig unter die Arme greifst? Was ich wie einrichten muß. Was ich im Browser einstellen muß. Wie ich die Einstellungen in der Registrie vornehmen muß?
      So im Schritt für Schritt. Ich wäre für deine Hilfe sehr dankbar.

      Gruss Ulrich

  2. Super Sache! 4 Jahre alter Beitrag und immer noch das Beste was man unter „Programme aus Browser starten“ finden kann. Vielen Dank!

    Wir nutzen den Trick um aus einer Intranet-Anwendung das Programm MicroSnap (http://www.mikrosnap.de) zu starten
    um Fotos zu einer gerade angezeigten HTML Seite abzuspeichern. Sehr geil!

    1. Hallo Bernhard,
      ich finde diese Lösung auch total genial, bin selber gerade dabei ein internes Intranet zu erstellen, welches Browsergesteuert ist und ich möchte auch gerne direkt die .exe-Dateien aus dem Browser starten lassen. Ich bekomme das aber mit dem AutoHotkey nicht ganz auf den Kasten. Das eigentliche Programm soll ja dann darüber gestartet werden. Da Du ja erfolgreich mit dem AutoHotkey arbeitest, könntest Du mir evtl. einen Beispieldatei anzeigen, wie ich genau mit dem Programm arbeite? Komme mit den Parametern nicht ganz klar, bzw. was damit gemeint ich…
      Würde mich über eine Rückantwort freuen….
      Beste Grüße aus dem Sauerland….

  3. Moin!
    Mir geht’s wie Andreas, ich komme mit foo, bar und parameter nicht zurecht. Das AHK-Script an sich funktioniert, aber die Verknüpfung über den Registry-Eintrag kapiere ich nicht.
    Danke für Tipps,

    Ingo

  4. Genial! Vielen vielen Dank für diesen tollen Beitrag. Ich habe mir jetzt länger die Zähne an der Thematik ausgebissen und überlegt wie ich das lösen soll 🙂 …

  5. Vielen Dank ich habe unzählige Stunden danach gesucht !!!!

    Es ist geschaft , es ist ganz einfach die Regestrierung:
    es muss auch die Überschrift
    „Windows Registry Editor Version 5.00″
    eingetragen sein. sonst geht es nicht. Hat mich 3 Std. gekostet !

    Also gganz einfach Text von oben in den Notpfad kopieren. Das ensprechende Program wählene /ändern. Dann abspeichern
    als *.reg . Danach Datei ausführen die Regestrierung erfolgt dann
    automatisch. Wäre klug ist trägt eine Kopie der cmd ein, von da aus
    kann man alle anderen Proramme aufrufen !

    Beispiel: die cmd ist eine Kopie aus system 32
    **********************************
    [HKEY_CLASSES_ROOT\foo]
    @=“URL:foo Protocol“
    „URL Protocol“=““

    [HKEY_CLASSES_ROOT\foo\shell\open\command]
    @=“\“C:\\ffmpeg\\bin\\cmd.exe\“ \“%1\““

    Gruss fuersorger

  6. Hallo, ich finde es super das es funktioniert. Habe lange danach gesucht, nur öffnet sich das Programm kurz und schließt sich dann sofort wieder. hat jemand eine Lösung? Danke

    1. Diese Methode startet die Executable. Wenn die sich sofort wieder schließt, liegt das nicht an dieser Methode, sondern am Programm — vielleicht werden ja noch zusätzliche Parameter übergeben.

      1. Hallo Jörg, danke für deine schnelle Antwort. Wie finde ich heraus welche Parameter noch gestartet werden müssen. Ich möchte den TS3 Server von der Webseite aus starten damit unser TS Admin diesen von der Webseite aus selbst wieder Starten kann, möchte ich diese Möglichkeit einfügen.

        1. Keine Ahnung wie TS funktioniert. Aber aufpassen: der TS-Server wird dann antürlich lokal auf dem PC gestartet, auf dem der Browser läuft – nicht etwa zentral auf eurem Webserver!

  7. Wer kein Autohotkey einsetzen will kann diese Stringmanipulation durch eine einfache Batchdatei ersetzen.

    REM Die Ziffer ist die Anzahl des Buchstaben ab dem ausgegeben wird.
    REM Bei foo:bar wäre das 5, ab dem 5 Buchstaben wird ausgegeben
    set str=%1
    set str=%str:~5%
    %str%

  8. Ich bin echt verblüfft!
    Ein fast 12 Jahre alter Blogeintrag hat eine Lösung für mein Problem. Gesucht, schnell gefunden, ausprobiert und es hat funktioniert!
    Da das so schnell ging habe ich eine Variante ausprobiert: Ein Protokollname mit nur einem Buchstaben z.B. ‚v‘. Dann könnte mit mstsc.exe /%1 der Programmaufruf mstsc.exe /v:bar erfolgen um eine Remotedesktopverbindung mit dem Rechner ‚bar‘ zu starten.
    Das Protokoll ‚v‘ konnte erfolgreich registriert werden, nur gab es keinen Programmaufruf. So einfach ging es also nicht.

  9. Leider nicht das was ich suchte, da ich leider weder den IE noch eine Shell auf meinem Ubuntu System besitze. Wäre schön wenn es dafür auch eine Möglichkeit gibt.

  10. Hallo Jörg
    Ich bin auf deine Lösung zu einem Problem gestossen, das mich schon länger beschäftigt. Ich möchte mit einem Link aus Edge (Chromium) den Explorer mit einem bestimmten Pfad starten.
    Leider funktioniert das unter Win10 20H2 nicht. Es öffnet sich immer ein Browserfenster. Der Registry-Eintrag entspricht genau deiner Lösung (C:\WIndows\explorer.exe).
    Hat sich unter Win10 da irgendwas verändert?
    Danke im Voraus für deine Unterstützung.
    MfG
    Martin

Schreiben Sie einen Kommentar zu Jürgen Hetzel Antworten abbrechen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert