{"id":238,"date":"2008-09-26T10:51:19","date_gmt":"2008-09-26T09:51:19","guid":{"rendered":"http:\/\/joergnapp.de\/?p=238"},"modified":"2014-08-31T10:37:27","modified_gmt":"2014-08-31T08:37:27","slug":"programme-durch-den-browser-starten","status":"publish","type":"post","link":"https:\/\/joergnapp.de\/blog\/programme-durch-den-browser-starten\/","title":{"rendered":"Programme durch den Browser starten"},"content":{"rendered":"<p>Im Bereich des Service-Desks setzen wir eine Reihe an Web-basierten Tools ein, allem voran die Helpdesk-L\u00f6sung OTRS.<\/p>\n<p>Ziel war es jetzt, Werkzeuge, die nicht im Browser, sondern als eigenst\u00e4ndiges Programm laufen, in diese Web-Umgebung zu integrieren. Die Aufgabe bestand also darin, den Browser ein weiteres Programm, eine exe, starten zu lassen.<\/p>\n<p>Aus naheliegenden Gr\u00fcnden geht das nicht ohne weiteres. Alle Browser haben Sicherheitsmechanismen eingebaut, die den Start von Executables verhindern.<br \/>\n<!--more--><\/p>\n<h3>Verwendung von ActiveX<\/h3>\n<p>Unser erster Ansatz war, mit Hilfe von JavaScript ein ActiveX-Control zu erzeugen, welches dann wiederum das gew\u00fcnschte Programm startet. Das folgende JavaScript leistet das Gew\u00fcnschte:<\/p>\n<pre>&lt;script language=\"JScript\"&gt;\/\/ &lt;![CDATA[\r\nfunction StartProgramm(Parameter) {\r\n  \/\/ Parameter zusammenbauen\r\n  var Parameter = \"-foo -bar \" + Parameter\r\n\r\n  \/\/ Erzeugen des ActiveX Objekts\r\n  var WshShell = new   ActiveXObject(\"WScript.Shell\");\r\n\r\n  \/\/ gew\u00fcnschtes Programm starten\r\n  WshShell.Run(\"c:\\\\Programme\\\\Anwendung\\\\Programm.exe \" + Parameter );\r\n}\r\n\/\/ ]]&gt;&lt;\/script&gt;<\/pre>\n<p>Mit einem Knopf in der Webseite kann das gew\u00fcnschte Programm dann gestartet werden:<\/p>\n<pre lang=\"html4strict\"><button>Programm starten<\/button>\r\n<\/pre>\n<p>Der Nachteil dieser Methode liegt darin, dass sie ausschlie\u00dflich im Internet Explorer funktioniert, da nur dieser die ActiveX-Technologie unterst\u00fctzt. Au\u00dferdem verhindert das Standard-Sicherheitsmodell zun\u00e4chst einmal die Ausf\u00fchrung, die Sicherheitseinstellungen m\u00fcssen angepasst werden.<\/p>\n<h3>Erzeugung eines eigenen Protokoll-Handlers<\/h3>\n<p>Als 2. M\u00f6glichkeit haben wir uns die sogenannten &#8222;Protokoll-Handler&#8220; angesehen. Die Windows-Shell erm\u00f6glicht es, eigene Protokolle zu definieren, mit denen sich Programme mit einer URL-\u00e4hnlichen Syntax starten lassen. Das bekannteste Beispiel ist sicherlich der &#8222;http&#8220;-Handler, der daf\u00fcr sorgt, dass es gen\u00fcgtunter,\u00a0 Start-&gt;Ausf\u00fchren eine URL einzugeben, um den Standard-Browser mit dieser URL zu starten.<\/p>\n<p>Um einen Protokoll-Handler zu installieren, gen\u00fcgt es, diesen in der Registry einzutragen. Am einfachstenkann man das mit einer .reg-Datei mit einem Inhalt \u00e4hnlich dem folgendden erledigen:<\/p>\n<pre lang=\"reg\">Windows Registry Editor Version 5.00\r\n\r\n[HKEY_CLASSES_ROOT\\foo]\r\n@=\"URL:foo Protocol\"\r\n\"URL Protocol\"=\"\"\r\n\r\n[HKEY_CLASSES_ROOT\\foo\\shell\\open\\command]\r\n@=\"\\\"C:\\\\Programme\\\\Anwendung\\\\Programm.exe\\\" \\\"%1\\\"\"\r\n<\/pre>\n<p>Nachdem die Eintr\u00e4ge in der Registry kann der Aufruf unter Start-&gt;Ausf\u00fchren getestet werden: Indem man in die Box &#8222;foo:bar&#8220; eingibt, wird das angegebene Programm gestartet.<\/p>\n<p>Dies funktioniert nun auch im Browser: Mit einem Link l\u00e4sst sich das lokal registrierte Programm starten.<\/p>\n<pre lang=\"html4strict\"><a href=\"foo:bar\">Programm starten<\/a>\r\n<\/pre>\n<p>Diese Technik funktioniert mit allen g\u00e4ngigen Browsern. Nachteil ist, dass dem Programm als Parameter die gesamte &#8222;URL&#8220; \u00fcbergeben wird, in unserem Beispiel w\u00e4re 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 <a href=\"http:\/\/www.autohotkey.com\/\">AutoHotkey<\/a>, da f\u00fcr die hierbei erzeugten Executables keine weitere Runtime mehr ben\u00f6tigt wird. Ein beispielhaftes AHK-Skript sieht dann so aus:<\/p>\n<pre lang=\"AutoIT\">; Parameter aus der Befehlszeile abholen\r\nparameter = %1%\r\n\r\n; Protokoll-Handler (hier: foo:) entfernen\r\nStringReplace, parameter, parameter, foo:\r\n\r\n; Remote Control starten\r\nrun programm.exe -foo -bar %parameter\r\n<\/pre>\n<p>Mit dieser Methode funktioniert die Integration der ben\u00f6tigten Werkzeuge (z.B. PC-Fernwartung) in den Web-Arbeitsplatz browser\u00fcbergreifend und mit den geringsten Eingriffen in die lokale Installation.<\/p>\n<p>Mehr zu dieser Methode in der <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa767914.aspx\">MSDN<\/a> und im <a href=\"http:\/\/kb.mozillazine.org\/Register_protocol\">MozillaZine<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Bereich des Service-Desks setzen wir eine Reihe an Web-basierten Tools ein, allem voran die Helpdesk-L\u00f6sung OTRS. Ziel war es jetzt, Werkzeuge, die nicht im Browser, sondern als eigenst\u00e4ndiges 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\u00fcnden geht &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/joergnapp.de\/blog\/programme-durch-den-browser-starten\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eProgramme durch den Browser starten\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[130,131,18,73,24,129,38,37,133,136,94,46,141,12,20,194,132],"class_list":["post-238","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-activex","tag-browser","tag-cool-tools","tag-firefox","tag-html","tag-javascript","tag-nagios","tag-open-source","tag-otrs","tag-protocol-handler","tag-sicherheit","tag-tools","tag-webseite","tag-webservices","tag-werkzeug","tag-windows","tag-wshshell"],"_links":{"self":[{"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/posts\/238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/comments?post=238"}],"version-history":[{"count":0,"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/posts\/238\/revisions"}],"wp:attachment":[{"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/media?parent=238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/categories?post=238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/joergnapp.de\/blog\/wp-json\/wp\/v2\/tags?post=238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}