Das Unternehmen, für das ich arbeite, verwendet C ++ Builder 6. Seit der Konzeption entwickeln wir nativen Code. Unser Flaggschiff-Produkt ist vollständig in nativem Code geschrieben.
Betritt das .NET Framework mit seinen Schnickschnack. Ich falle, hake, schnüre und versinke. Ich bin davon überzeugt, dass .NET unbedingt unser neues Framework für die gesamte neue Softwareentwicklung sein sollte und dass wir so schnell wie möglich mit der Migration unserer vorhandenen Codeline beginnen sollten. Bei all den Vorteilen braucht es nicht viel Überzeugungsarbeit. Sie akzeptieren meinen Vorschlag wie gewohnt.
An diesem Punkt beginne ich mit der Entwicklung meiner ersten .NET-Anwendung. Es läuft alles wie geplant. Das Projekt ist nur eine Komponente unseres Produkts. Und so komme ich dazu, ein Installationsprogramm für diese neue Komponente zu erstellen. Als Unternehmen sind wir stolz darauf, die Dinge für den Benutzer so einfach wie möglich zu gestalten. Selbst Microsoft mit Tausenden von Entwicklern erstellt keine Installationsprogramme wie wir. Wenn Sie beispielsweise Microsoft CRM installieren, erhalten Sie nur eine Liste der Fehler und Voraussetzungen, die installiert werden müssen, bevor Sie fortfahren können. Nicht wir. Noch nie. Wenn Sie etwas benötigen, werden wir es für Sie installieren.
Dadurch fühlen sich unsere Installationen so einfach an. .NET Framework nicht installiert? Kein Problem! Wir erledigen das für Sie. Benötigen Sie einen SQL Native-Client? Fein!
Das Problem ist, dass jetzt, da eine einzelne Komponente unserer Lösung in .NET geschrieben ist, der Installationsprozess unglaublich kompliziert wird. Bevor ich überhaupt mit der Installation unseres Produkts beginnen kann, muss ich Folgendes tun:
Ermitteln Sie, ob die Voraussetzung installiert ist
Installieren Sie es, wenn dies nicht der Fall ist
Stellen Sie sicher, dass es erfolgreich installiert wurde
Nächste Voraussetzung
Um .NET Framework zu installieren, benötige ich zuerst Windows Installer 4.5. Es gibt jedoch unterschiedliche Versionen für die verschiedenen Betriebssysteme. Daher füge ich die Betriebssystemerkennung hinzu und starte die richtige EXE-Datei. Oh, .NET Framework ist bereits mit 2k8 gepackt und die Installations-Exe kann nicht darauf ausgeführt werden. Sie müssen OCSetup.exe mit Parametern ausführen, um es zu installieren.
Und so geht es weiter. Dann muss SQL Express 2005 installiert werden. Die Abhängigkeiten nehmen wieder zu.
Ich argumentiere mit dem Management, dass selbst Microsoft es dem Benutzer nicht so einfach macht. Ihre Antwort ist, dass es keinen Grund für uns gibt, auf diese Weise nicht besser als sie zu sein. Ich kann damit nicht streiten, außer dass ich das Gefühl habe, dass es sehr gute Gründe gibt, warum sie sich für ihren Ansatz entschieden haben.
Plötzlich ist unser Installer massiv. Alle Voraussetzungen für .NET, nicht einmal die 64-Bit-Unterstützung, für die eine ganze Reihe von EXE-Dateien installiert werden müssen. Jetzt ist es soweit, dass Benutzer eine "schnelle" Bewertung herunterladen können. Was für ein Witz. Sie müssen 500 MB herunterladen, um eine 30 MB-Anwendung auszuführen. Der Großteil des Installationspakets sind Voraussetzungen.
Das Management ist der Ansicht, dass wir zu viele Abhängigkeiten / Voraussetzungen haben. Ich verstehe vollkommen. Sie schlagen vor, dass wir uns vom .NET-Framework entfernen und in ein Heimatland zurückkehren, in dem die Installation noch "einfach" war. Hier möchte der eine Teil von mir für .NET eintreten und die Vorteile im Großen und Ganzen, die verbesserte Entwicklungserfahrung, die einfachere Wartung und die allgemeine Codequalität erläutern. Der andere Teil von mir stimmt ihnen von ganzem Herzen zu! Für die Entwicklung in .NET müssen Sie lediglich zu viele andere Voraussetzungen installieren, was die Installation erschwert.
Ja, einige der .NET-Befürworter werden behaupten, dass alles auf einem gepatchten und aktualisierten Betriebssystem installiert sein sollte. Dies ist wahr, aber nicht alle Kunden haben dies, und wenn Sie einfach "Es tut mir leid, zuerst aktualisieren" sagen, wird dies nicht gekürzt. Denken Sie daran, wir sind stolz auf die allgemeine Benutzererfahrung.
Wir denken jetzt darüber nach, wieder nativen Code zu schreiben, und ich weiß, dass wir an Entwicklungsgeschwindigkeit und allen Extras von .NET verlieren. Aber wir gewinnen in diesem Bereich, sei es klein, ob Sie das große Ganze betrachten oder nicht. Da wir über native Kenntnisse in der Codeentwicklung verfügen und .NET für uns tatsächlich Neuland ist, ist es sogar sinnvoll, zurück zu gehen.
Meine Frage lautet: Wie beurteilt Ihr Unternehmen dieses Problem, wenn es überhaupt ein Problem ist, und wie wird der Geschäftsfall aussehen, den ich dem Management vorschlage, vorausgesetzt, ich möchte weiterhin alle unsere Produkte auf .NET migrieren?
Antworten:
Dies ist der Grund, warum viele Unternehmen zu Webinstallationsprogrammen gewechselt sind, die alle Voraussetzungen im laufenden Betrieb von Ihrer Homepage herunterladen. Da das Betriebssystem in den meisten Fällen über 99% der benötigten Komponenten verfügt (sofern diese mit Windows Update aktualisiert wurden).
Ich würde nicht alles für x64 und x32 im selben Installationsprogramm speichern. Erstellen Sie zwei Installationsprogramme, eines für jede Architektur.
quelle
Suddenly, our installer is massive. All the prerequisites for .NET, not even talking about 64 bit support which has a whole seperate range of EXEs to install
Paint.NET schließt die Installation der Voraussetzungen gut ab, ohne das .NET Framework standardmäßig damit zu bündeln. Das Endergebnis ist eine nicht verwaltete ausführbare Shim-Datei, die nach dem .NET Framework und anderen Dingen sucht und Ihre Hand hält, wenn es installiert wird. Alle werden sofort heruntergeladen, sobald sie benötigt werden. Anschließend führen sie eine WinForms-Anwendung aus, die in MSI aufgerufen wird, um die Installation weiter in Watte zu verpacken.
Ein Google wert.
Es ist auch wahrscheinlich, dass auf vielen Client-Computern bereits eine Version von .NET Framework installiert ist, da es Teil von Microsoft Update ist, sodass es in der Geschäftswelt leichter konsumiert werden kann.
Paint.NET-Blogbeiträge zur Installation:
http://blog.getpaint.net/2008/08/24/the-paintnet-install-experience-part-1-version-3xx/
http://blog.getpaint.net/2008/08/25/the-paintnet-install-experience-part-2-version-40/ (danke Rup!)
Wenn man ein wenig mehr in die Geschichte hineinliest, musste das Management vermutlich mindestens einmal den Schmerz der Bereitstellung mit der C ++ - Anwendung durchstehen, aber jetzt ist es fertig und wird als "einfach" eingestuft. Nehmen Sie sich etwas Zeit für die Bereitstellung und präsentieren Sie dies dem Management. Zeigen Sie ihnen, wie einfach die Installation ist, indem Sie den Schmerz verbergen :)
quelle
Kehren wir zu dem Grund zurück, warum Sie ursprünglich von nativem Code zu .NET-Code wechseln wollten: Für Sie als Programmierer ist dies effizienter. Viele Dinge sind in .NET einfacher als in C ++ (oder einer anderen verwendeten Muttersprache), sodass Sie Ihre Anwendungen viel schneller entwickeln können.
Wie ist dann die Zeit, die Sie mit der Entwicklung der Anwendung verbringen, mit der Zeit, die Sie mit der Entwicklung des Installationsprogramms verbringen? Selbst wenn Sie ein paar Wochen damit verbringen müssen, das Installationsprogramm (insbesondere den Framework-Setup-Teil) festzunageln, sollte dies mehr oder weniger das einzige Mal sein, dass Sie dies durchlaufen müssen.
Für alle zukünftigen Anwendungen würden Sie ein nahezu identisches Installationsprogramm verwenden. Sie würden weiterhin alle erforderlichen Überprüfungen durchführen, aber anstatt Dateien nach C: \ Foo zu kopieren, kopieren Sie einige andere Dateien nach C: \ bar.
Meiner Meinung nach ist dies eine einfache Frage der Wirtschaft. Ja, die Entwicklung eines (guten / vollständigen) Installationsprogramms für eine .NET-Anwendung ist teurer, aber wenn dies der Schritt ist, den Sie einmal ausführen müssen, um Ihre Entwicklungszeit drastisch zu verbessern, ist dies ein Kinderspiel. Ihre Kapitalrendite würde wahrscheinlich in der Größenordnung von Wochen liegen.
quelle
Ich glaube, ich muss auf diese Aussage antworten:
Ja, einige der .NET-Befürworter werden behaupten, dass alles auf einem gepatchten und aktualisierten Betriebssystem installiert sein sollte. Dies ist wahr, aber nicht alle Kunden haben dies, und wenn Sie einfach "Es tut mir leid, zuerst aktualisieren" sagen, wird dies nicht gekürzt. Denken Sie daran, wir sind stolz auf die allgemeine Benutzererfahrung.
Wenn Ihr Benutzer darauf besteht, sich selbst in den Fuß zu schießen, indem er ein System betreibt, von dem der Anbieter informiert hat, dass es nicht mehr für den Zweck geeignet ist , können Sie nicht viel tun, um ihm zu helfen. Ich bin mir bewusst, dass ich dadurch wie ein widerlicher Aktivist aussehe, aber ich sehe es genauso wie ein Handwerker - es ist Sache des Kunden, sicherzustellen, dass die Umgebung, in der ich arbeiten soll, vorhanden ist solide und für das Produkt geeignet. Wenn dies nicht der Fall ist, werde ich eine weitere Vergütung akzeptieren, um diesen Job ebenfalls zu erledigen, aber es könnte ihnen dennoch zusätzliche Arbeit verursachen, da sie nicht die Voraussicht hatten, sicherzustellen, dass sie verstanden haben, was sie gekauft haben.
Ich glaube, dass Software-Kunden lange genug ignorant bleiben durften und dass sie nun verstehen müssen, was sie kaufen. Der Betrieb einer Unternehmens-IT-Umgebung, die nicht ordnungsgemäß gepatcht ist, entspricht dem Betrieb eines Fahrzeugs, für das ein Hersteller zurückgerufen wurde. Ein Windows Service Pack entspricht in vielerlei Hinsicht einem Rückruf. Sie sind gesetzlich nicht verpflichtet, sich an einen Rückruf zu wenden, aber dies liegt in Ihrem besten Interesse als Unternehmen und Sie können für Schäden verantwortlich gemacht werden, die durch das Ausweichen vor der Verantwortung verursacht werden.
quelle
Jede Visual C ++ - App hat auch Voraussetzungen / externe Abhängigkeiten: Laufzeit 6.0, 2003, 2005, 2008 oder 2010? kein SP, SP1 oder SP2? x86 oder x64? Welche Version von Windows Installer benötigt 2005 SP2? Und was 2008 SP1? Und so weiter, so weiter.
Das sind also weit hergeholte Argumente! Wie Joels Murren über .NET. Und schau was jetzt ist !
quelle
Ich sehe nicht, wie es wesentlich mehr Voraussetzungen für .net über C ++ Builder gibt. Sie beschweren sich über SQL Server, ignorieren jedoch die Tatsache, dass Sie auch eine Datenbank mit C ++ Builder installieren müssen. Sie beschweren sich über x64 vs x32, aber .NET erfordert keine Änderung. Auf beiden läuft dieselbe Exe (und kompiliert sich für beide Umgebungen optimal). Das Gleiche gilt nicht für C ++ Builder. Möglicherweise benötigen Sie separate Versionen von SQL Server, dies gilt jedoch auch für den C ++ - Builder (es sei denn, Sie installieren nur x32 auf allem).
Ja, es gibt Probleme mit der neuen Installationsversion, aber diese Komponenten sind nicht sehr groß. Und Sie können die Installer wirklich dazu bringen, nur die Aprts herunterzuladen und zu installieren, die erforderlich sind.
C ++ Builder ist wahrscheinlich einfacher für Sie, da Sie bereits Zeit in die Erstellung eines guten Installationsprogramms investiert haben. Sie müssen dasselbe für .NET tun, und dann können Sie anhand realer Probleme auswählen. Und nicht dies.
Der Grund, warum Microsoft sich dafür entscheidet, Dinge so zu tun, wie sie es tun, ist, dass viele Benutzer, insbesondere Unternehmensbenutzer, es nicht schätzen, wenn Dinge automatisch für sie installiert werden (möglicherweise, weil sie eine Anwendung haben, die von einer bestimmten Version einer Bibliothek abhängt). und du kommst mit und löschst es mit einer neuen Version aus, die sie nicht einfach deinstallieren können.
Was Sie als "einfacher machen" für weniger sachkundige Menschen ansehen, macht die Dinge für diejenigen, die wissen, was sie tun, VIEL schwieriger.
Hier ist ein gutes Beispiel. Eine Sache, die ich absolut verachte, ist, wenn ich eine App installiere, die SQL Server benötigt, und eine eigene Instanz von SQL Server installiert, obwohl ich möglicherweise bereits mehrere Instanzen habe, die sie verwenden könnte. Einfach für den Anfänger, ein Schmerz für mich, wenn ich versuche, Ihre App mit meiner einzelnen Instanz zum Laufen zu bringen.
quelle
Wenn Ihre App unter Mono ausgeführt wird, ist der Versand Ihrer App mit der Mono-Laufzeit möglicherweise weniger schmerzhaft.
quelle