Das Microsoft 1 Click Deployment

Microsoft promotet mit seinem Visual Studio Express 2010 das 1-click-Deployment. Die Idee dahinter:

Ein User klickt auf einen Link, und voilla, alles wird automatisch runtergeladen und installiert.

Und hier ist, was man dabei um die Ohren geschlagen bekommt.

Ausgangspunkt

  • Ich habe ein VB-Projekt gemacht das ich deployen will.
  • Also drücke ich auf "Publish" und erhalte einen Ordner mit einem setup.exe
Cool, denke ich, endlich mal ein einfacher Vorgang.

Deployment

  • Ich nehme das setup.exe und packe es auf einen USB-Stick
  • Dann kopiere ich es auf einen anderen Rechner und starte es.
Fehler. Geht nicht. Denn die anderen Dateiein im Verzeichnis braucht man ebenfalls.

Huh? Also das URL das ich habe von dem es gestartet werden muss ist kein URL, sondern ein Verzeichnis in dem ein User ein setup.exe starten muss. Mit "Click" hat das nichts mehr zu tun. Merke: 1-Click-Deployment bedeutet 1 Klick auf 1 URL und somit 1 Datei, und nicht mehrere.

Mal abgesehen davon, dass ein unendlich kryptischer Fehler auf genau diesen Umstand hindeutet, nämlich dass andere Dateien fehlen, ist das Verfahren schon überzeugend unbrauchbar.

Deployment 2. Versuch

  • OK, zweiter Versuch. Ich nehme nun die anderen Dateien mit.
  • Ich starte den Setup und erhalte eine Meldung in etwa: "Die Anwendung kann weder installiert noch gestartet werden. Die Anwendung erfordert, dass die Assembnly Microsoft.VisualBasic.PowerPacks.Vs Version 10.0.0.0 zuerst im globalen Assemblycache (GAC) installiert wird. Wenden Sie sich an den Systemadministrator."
Microsoft verkündet mal wieder die Unwahrheit

Also unter 1 Click Deployment verstehe ich etwas anderes. Das mit dem Fehlen von Komponenten darf da zwar schon sein, aber ich würde erwarten, dass der 1 Klick diese dann auch gleich mitinstalliert. Aber es wird noch besser.

Versuch der Reparatur

  • Ich versuche diesen ominösen PowerPack zu finden. Aber Pustekuchen.
  • Nach gefühlten 42h Googlen finde ich dann heraus, dass es sich anscheinend um den - Tusch - Microsoft Visual Basic Power Pack 3 handelt.
  • Ich lade dann diesen Power-Pack also runter von Microsoft und installiere ihn. Nach weiteren gefühlten 42h Installationsdauer (Vista!) kommt dann die Meldung dass alles installiert ist.
  • Aber Pustekuchen, es funktioniert immer noch nix.
  • Leider ist diese Information nämlich falsch. Offensichtlich haben die Leute die dasselbe Problem hatten, dieses irgendwie gelöst, und dachten, die Lösung wäre dieser ältere PowerPack gewesen, weil es der letzte ist, den Microsoft auf seiner Seite finden lässt.
Der VB PowerPack 3 ist nicht der VB PowerPack 10. Diese Information im Web ist falsch. Das zeigt aber nur, wie kompliziert die Sache offensichtlich ist.

Ich war aber ebenso nicht in der Lage, VB PowerPack 10 auf den Microsoft-Webseiten zu finden. Keine Ahnung warum Microsoft den versteckt.

In einem Microsoft-Forum waren dann ebenso weder der Microsoft Support noch BING in der Lage den richtigen Link herauszufinden. Aber ein hilfreicher User hat das dann doch geschafft: go.microsoft.com/fwlink/?LinkID=145727&clcid=0x804

Der VB PowerPack 10 heißt installiert übrigens
"Microsoft Visual Basic PowerPacks 10.0" während der alte (für 2008) heißt
"Microsoft Visual Basic Power Packs 3.0". Das kapiere wer will, ich jedenfalls nicht.

Gescheitert

Also, wie funktioniert bitte dieses wunderbare Microsoft 1 Click deployment? (Oder Microsoft Click Once Deployment oder wie auch immer gerade mal wieder vom Marketing umbenannt worden ist?)

Nach weitere gefühlten 42 Tagen Rumsucherei kam ich dann doch auf den Trichter.

Doch eine Lösung

Irgendwie stolperte ich dann über folgende Information:

msdn.microsoft.com/de-de/library/8st7th1x.aspx

Da dieses Link vermutlich in den nächsten 0,3 Microsekunden vaporisiert hier kurz die Zusammenfassung:

  • Unter VB 2010 geht man in die Projekteigenschaften
  • Unter "Veröffentlichen" unter "Erforderliche Komponenten" markiert man die fehlende Komponente und sagt sie sollen runtergeladen werden
  • Dann publiziert man die Komponente nochmals
  • Und dann klappt die Installation, weil die fehlenden Komponenten runtergeladen werden.
Es ist also ein Fehler in der Applikation. Die Meldung die der Installer rausbläst ist also vollkommener Murx. Man muss sich nicht an den Systemadministrator sondern an den Program-Vendor wenden damit er das Problem repariert. Aha, wieder ein Bit unnützer Information erlernt.

Microsoft wie es leibt und lebt, eben. Ob es funktioniert werde ich sehen, wenn die gefühlten 42h zum Installieren rum sind.

Und ja, jetzt geht es.

Oder auch nicht. Ich hatte ein Text-Deployment per GIT gemacht - beim Kopieren der Textdateien wurde das Windows CR aus den Textdateien entfernt. Das geht schief, weil Microsoft die Signaturen der Dateien prüft.

An sich ist das ja etwas vollkommen positives. Negativ fällt mal wieder nur die Inkompatibilität von Microsoft auf. Gelöst habe ich das im GIT mit einer Datei .gitattributes die folgendes enthält:
publish/* binary
publish/*/* binary
publish/*/*/* binary
publish/*/*/*/* binary
publish/*/*/*/*/* binary
publish/*/*/*/*/*/* binary
publish/*/*/*/*/*/*/* binary
publish/*/*/*/*/*/*/*/* binary
Ach ja, ich war genervt, deshalb.

Fazit

  • Sun/Oracle kriegen es hin.
  • Linux kriegt es schon lange hin.
  • Apple kriegt es hin.
  • Google kriegt es sowieso hin.
  • Netscape hat es auch hingekriegt.
  • Selbst Adobe kriegt es inzwischen hin.
Aber Microsoft, da bekommt man noch Schwielen. Mal sehen wieviel Jahrzehnte die noch brauchen um es so hinzukriegen, dass man nicht hilflos im Wald stehen gelassen wird.

In der heutigen Zeit ist das ein Epic Fail, eine Unmöglicherkeit, das noch nicht sauber hinzukriegen.

Grundlagen

Hier die Grundlagen was ich unter One-Click-Deployment verstehe:

  • Auf einer Webseite ist ein Button "Deploy"
  • Man klickt auf den Button
  • Die Anwendung wird heruntergeladen und installiert
Dazu kommen aber noch folgende Nebensächlichkeiten:

  • Es handelt sich um ein einziges URL, also nur 1 Datei und kein Dateibaum
  • Automatische Updates sind möglich aber nicht nötig
  • Es dürfen Sicherheitsabfragen passieren, d. h. es können zusätzliche Klicks dazukommen
  • Wenn Dinge nachgeladen werden, dann automatisch

Was andere machen

Bei anderen geht das wie beschrieben:

  • Adobe AIR ist eine einzige Datei (eine Art ZIP) das alles enthält das man braucht. Ggf. wird die AIR Runtime nachinstalliert.
  • Sun hat es mit seinem Java-Quickstart vorgemacht wie es aussehen kann. Technisch ist es zwar komplizierter, aber es geht - soviel ich weiß - mit einem einzigen JAR file
  • Bei Windows geht das übrigens auch, aber eben nicht mit den Tools die Microsoft bereitstellt, sondern nur mit Third-Party-Lösungen. Leider sind diese aber nicht Teil von Visual Studio 2010 Express.
  • Bei Linux geht das schon seit Jahren. Inzwischen ist es schon fast möglich, Linux mit 1 Klick zu installieren und laufen zu lassen.
  • Netscape hat gezeigt wie es mit JavaScript geht. Daher kommt ja das ganze Web. Und ja, alles geht mit einer einzigen Datei, wenn man es denn so will!
  • Google und Apple, auch Nokia, haben entsprechende Dinge in ihre Handys eingebaut. Naja, ob es auf der Server-Seite eine einzige Datei ist, weiß ich indes nicht. Es wäre aber sinnvoll.

Wie es Microsoft macht

Eigentlich ist das was Microsoft macht gar nicht so blöd wie es aussieht. Nur finde ich, dass es einfach nach bald 20 Jahren, irgendwie noch sehr Urtümlich aussieht, so wie ich es vor 15 Jahren schon als "zu kompliziert" bezeichnet hätte:

  • Microsoft stellt ein "publish.htm" bereit, über das man die Software installieren kann.
  • Dazu gehört ein .exe das man runterladen und starten kann.
  • Das .exe lädt (anscheinend) eine weitere Datei nach und prüft dann all die Abhängigkeiten.
  • Es lädt die Abhängigkeiten herunter und installiert sie.
  • Ggf. lädt es die Applikation herunter und installiert sie, oder es konfiguriert sie so, dass sie ohne Installation direkt ausgeführt wird.
Letzteres ist zwar ein interessantes Feature, aber für das Internet schlecht zu gebrauchen, da die Applikation dann nur Online läuft.

Und wie sieht es für den User aus?

So: hydra.geht.net/git/WindowsWallpaper/WindowsWallpaper/publish/publish.htm