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.

7 Gedanken zu „Programme durch den Browser starten“

  1. leider bekomme ich es nicht zum laufen…villt etwas mehr kommentare besonders in punkto parameter?!?…also so wie es da steht blicke ich nicht durch

  2. 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

  3. 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….

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>