Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group...

Post on 05-Apr-2015

104 views 0 download

Transcript of Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group...

Deployment und Versioning Deployment und Versioning von .NET Applikationenvon .NET Applikationen

Uwe BaumannUwe Baumann

TechnologieberaterTechnologieberaterDeveloper GroupDeveloper GroupMicrosoft GmbHMicrosoft GmbH

uwebaum@microsoft.comuwebaum@microsoft.com

Was Sie erwartetWas Sie erwartet

Eine kurzer Überblick in den Eine kurzer Überblick in den Problemkreis Problemkreis Die „DLL-Hölle“ und ihre UrsachenDie „DLL-Hölle“ und ihre Ursachen

Eine Einführung in die Eine Einführung in die .NET-Technologien für .NET-Technologien für Deployment und VersioningDeployment und Versioning Konfiguration von Applikationen mit Hilfe Konfiguration von Applikationen mit Hilfe

von Policy Filesvon Policy Files Komponenten mit integriertem Setup-CodeKomponenten mit integriertem Setup-Code Microsoft Installer (MSI) SupportMicrosoft Installer (MSI) Support

Anforderungen [1/3]Anforderungen [1/3]

Unkompliziertes DeploymentUnkompliziertes Deployment "XCopy"-Installation"XCopy"-Installation Einfaches physikalisches Verschieben von Einfaches physikalisches Verschieben von

ApplikationenApplikationen

Verhinderung von "Nebenwirkungen"Verhinderung von "Nebenwirkungen" Neue Applikationen sollen bereits Neue Applikationen sollen bereits

installierte Applikationen nicht negativ installierte Applikationen nicht negativ beeinflussenbeeinflussen

Anforderungen [2/3]Anforderungen [2/3]

Management von Software-ServiceManagement von Software-Service Wie können Bugfixes ausgeliefert werden?Wie können Bugfixes ausgeliefert werden? Was tun, wenn der Bugfix neue Bugs Was tun, wenn der Bugfix neue Bugs

enthält?enthält? Was tun, wenn ein Bugfix für eine Was tun, wenn ein Bugfix für eine

gemeinsamegemeinsame Komponente nur von Komponente nur von einereiner Applikation genutzt werden soll?Applikation genutzt werden soll?

Anforderungen [3/3]Anforderungen [3/3]

Einfache Installation von benötigten Einfache Installation von benötigten RessourcenRessourcen Erstellen von DatenbankenErstellen von Datenbanken Setup von Message QueuesSetup von Message Queues

Ein Beispielprojekt: Ein Beispielprojekt: "MyOffice .NET""MyOffice .NET"

"MyOffice"-Komponenten"MyOffice"-Komponenten

MyText und MyCalcMyText und MyCalc "Textverarbeitung" und "Textverarbeitung" und

"Tabellenkalkulation""Tabellenkalkulation" .NET WinForms-Applikationen (EXE).NET WinForms-Applikationen (EXE)

MySpellerMySpeller "Rechtschreibprüfung""Rechtschreibprüfung" .NET Klassenbibliothek (DLL).NET Klassenbibliothek (DLL) Gemeinsam genutzte Komponente –Gemeinsam genutzte Komponente –

wird von MyText und MyCalc referenziertwird von MyText und MyCalc referenziert

Gemeinsame Systemkomponenten(Zentraler Speicherort)

"MyOffice" - Abhängigkeiten"MyOffice" - Abhängigkeiten

System.Windows.Forms.DLL.NET Formularbibliothek

System.Windows.Forms.DLL.NET Formularbibliothek

System.Data.DLL.NET Datenzugriffs-Bibliothek

System.Data.DLL.NET Datenzugriffs-Bibliothek

MSCorLib.DLL.NET Basis-Datentypen

MSCorLib.DLL.NET Basis-Datentypen

Applikations-Komponenten

(Lokaler Speicherort)

MyText.EXEMyText.EXE

MySpeller.DLLMySpeller.DLL

MyCalc.EXEMyCalc.EXE

NEUEVERSION!

NEUEVERSION!

Die „DLL-Hölle“…Die „DLL-Hölle“…

Der „Highlander-Effekt“ bei DLLs:Der „Highlander-Effekt“ bei DLLs:„Es kann nur eine(n) geben“ „Es kann nur eine(n) geben“ Alle Clients müssen dieselbe DLL Alle Clients müssen dieselbe DLL

verwendenverwenden Diese wird eventuell von einer anderen Diese wird eventuell von einer anderen

Applikation mit einer inkompatiblen Applikation mit einer inkompatiblen Version überschriebenVersion überschrieben

Clients können keine „private Kopie“ der Clients können keine „private Kopie“ der DLL verwenden oder eine bestimmte DLL verwenden oder eine bestimmte Version anfordernVersion anfordern

……und die .NET Runtime (CLR)und die .NET Runtime (CLR)

Die CLR kann verschiedene Versionen Die CLR kann verschiedene Versionen einer gemeinsam genutzten einer gemeinsam genutzten Komponente gleichzeitig ausführenKomponente gleichzeitig ausführen Jede Client-Applikation kann individuell die Jede Client-Applikation kann individuell die

gewünschte Version anforderngewünschte Version anfordern Extensive Konfigurationsmöglichkeiten Extensive Konfigurationsmöglichkeiten

Komponenten enthalten alle wichtigen Komponenten enthalten alle wichtigen Informationen über sich selbstInformationen über sich selbst Keine Eintragungen in der Registry mehr Keine Eintragungen in der Registry mehr

nötignötig

Inside "MySpeller"Inside "MySpeller"

MySpeller.DLL

MSIL Code(kompiliert)

MSIL Code(kompiliert)

.method public static bool CheckSpelling(string DocumentString) cil managed{ // Code size 40 (0x28) .maxstack 3 .locals init ([0] bool CheckSpelling) IL_000c: ldstr "HALLO" IL_0011: ldc.i4.0 IL_0012: call IL_0017: ldc.i4.0 IL_0025: nop IL_0026: ldloc.0 IL_0027: ret} // end of method MySpeller::CheckSpelling

MetadatenMetadaten

Reference-Tabellen Was wird importiert?

Definition-Tabellen Was wird exportiert?

Jedes Modul enthält…Jedes Modul enthält… Metainformationen Metainformationen

darüber, welche externen darüber, welche externen Typen, Methoden etc. von Typen, Methoden etc. von diesem Modul verwendet diesem Modul verwendet werdenwerden

Metainformationen Metainformationen darüber, welche Typen, darüber, welche Typen, Methoden etc. von diesem Methoden etc. von diesem Modul exportiert werdenModul exportiert werden

Optional: Ausführbaren Optional: Ausführbaren Code (MSIL)Code (MSIL)

Imports System.IOImports System.DataImports Microsoft.Win32

Public Class MySpeller

'Simple "Rechtschreibprüfung", kann nur auf das Wort "HALLO" prüfen Public Shared Function CheckSpelling _ (ByVal DocumentString As String) As Boolean

If DocumentString.ToUpper.Trim <> "HALLO" Then Return False Else Return True End If

End Function

AssembliesAssemblies

"Logische" EXE oder DLL unter .NET"Logische" EXE oder DLL unter .NET Eine Assembly kann aus einem oder Eine Assembly kann aus einem oder

mehreren Files bestehen, ist aber nach mehreren Files bestehen, ist aber nach außen außen eineeine logische Einheit logische Einheit

Versionierung, Deployment und Versionierung, Deployment und Security beziehen sich jeweils auf die Security beziehen sich jeweils auf die AssemblyAssembly als Ganzes als Ganzes

Enthält ein Manifest, welches Auskunft Enthält ein Manifest, welches Auskunft über die Assembly gibtüber die Assembly gibt

Single File AssemblySingle File Assembly

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MySpeller.DLL

Assembly MySpellerVersion X

Jede Assembly enthält Jede Assembly enthält genau ein Manifestgenau ein Manifest Auch bei Single File Auch bei Single File

AssembliesAssemblies

Jedes File der Jedes File der Assembly enthält Assembly enthält Metadaten über seine Metadaten über seine eigenen Typen und eigenen Typen und MethodenMethoden

MetadatenMetadaten

Importe

ManifestManifest

Exporte

Files

Exporte

DemoDemo

"MySpeller" im MSIIL Disassembler "MySpeller" im MSIIL Disassembler ILDasm.exeILDasm.exe

Multi File AssemblyMulti File Assembly

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MetadatenMetadaten

Importe

Exporte

ManifestManifest

Exporte

Files

MySpeller.DLL

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MetadatenMetadaten

Importe

Exporte

MySpellerTools.DLL

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MetadatenMetadaten

Importe

Exporte

MyGrammar.DLL

Assembly MySpellerVersion X

DemoDemo

Erstellung einer Multi File AssemblyErstellung einer Multi File Assembly

Private und Public AssembliesPrivate und Public Assemblies

Private AssembliesPrivate Assemblies Befinden sich im Applikationsverzeichnis Befinden sich im Applikationsverzeichnis

oder einem Unterverzeichnis davonoder einem Unterverzeichnis davon Werden nur von einer Applikation genutztWerden nur von einer Applikation genutzt

Public AssembliesPublic Assemblies Werden von einer oder mehreren Werden von einer oder mehreren

Applikationen genutztApplikationen genutzt Befinden sich an einem zentralen Ort, dem Befinden sich an einem zentralen Ort, dem

Global Assembly Cache (GAC)Global Assembly Cache (GAC)

Der Global Assembly CacheDer Global Assembly Cache

Speicherort für Public AssembliesSpeicherort für Public Assemblies Kann mehrere Versionen derselben Kann mehrere Versionen derselben

Assembly aufnehmenAssembly aufnehmen Die CLR ist in der Lage, unterschiedlichen Die CLR ist in der Lage, unterschiedlichen

Applikationen verschiedene Versionen Applikationen verschiedene Versionen einer Assembly zu liefern und diese einer Assembly zu liefern und diese gleichzeitig im Speicher zu haltengleichzeitig im Speicher zu halten

Identifizierung von AssembliesIdentifizierung von Assemblies

Assemblies im GAC müssen eindeutig Assemblies im GAC müssen eindeutig identifizierbar seinidentifizierbar sein Was passiert, wenn es zwei verschiedene Was passiert, wenn es zwei verschiedene

MySpeller-Bibliotheken gibt?MySpeller-Bibliotheken gibt? COM-Lösung: Eindeutige GUID?COM-Lösung: Eindeutige GUID?

Strong Names [1/3]Strong Names [1/3]

Strong Names liefern IdentitätStrong Names liefern Identität Teile der Metainformation werden mit Teile der Metainformation werden mit

einem Private Key digital signierteinem Private Key digital signiert Assemblies, welche die Public Assembly Assemblies, welche die Public Assembly

referenzieren, enthalten den referenzieren, enthalten den entsprechenden Public Keyentsprechenden Public Key

Strong Names sind sicherStrong Names sind sicher Nur der Autor hat den Private Key und Nur der Autor hat den Private Key und

kann damit signierenkann damit signieren Manipulationen werden verhindertManipulationen werden verhindert

Strong Names [2/3]Strong Names [2/3]

Private Key

Public Key

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MetadatenMetadaten

ManifestManifest

Assembly MySpeller

Hash-Wert

RSA Signatur

MySpeller.DLL

.snk File

+

Strong Names [3/3]Strong Names [3/3]

Private Key

Public Key

MSIL Code(kompiliert)

MSIL Code(kompiliert)

MetadatenMetadaten

ManifestManifest

Assembly MySpeller

Hash-Wert A

RSA Signatur

MySpeller.DLL

.snk File

+

Hash-Wert B

A=B ?

RSA Signatur

DemoDemo

Der Global Assembly Cache (GAC)Der Global Assembly Cache (GAC)

.NET Deployment: Grundregel.NET Deployment: Grundregel

Verwenden Sie möglichst wenige Verwenden Sie möglichst wenige Shared Assemblies!Shared Assemblies! Alle Private Assemblies, auf die Ihre Alle Private Assemblies, auf die Ihre

Applikation verweist, können im Applikation verweist, können im Applikationsverzeichnis bzw. Applikationsverzeichnis bzw. Unterverzeichnissen davon "leben"Unterverzeichnissen davon "leben"

Die gesamte Applikation kann so per Die gesamte Applikation kann so per "XCopy" an eine andere Stelle kopiert "XCopy" an eine andere Stelle kopiert werdenwerden

Eine solche Applikation läuft Eine solche Applikation läuft beispielsweise auch direkt von CD!beispielsweise auch direkt von CD!

Shared Assemblies Shared Assemblies

Shared Assemblies sind trotzdem Shared Assemblies sind trotzdem unvermeidbarunvermeidbar Systembibliotheken, Systembibliotheken,

Datenzugriffsbibliotheken uvm.Datenzugriffsbibliotheken uvm. Änderungen an Shared Assemblies Änderungen an Shared Assemblies

beeinflussen potentiell viele Applikationenbeeinflussen potentiell viele Applikationen(wie "einst" unter COM! ;-)(wie "einst" unter COM! ;-)

Bei negativen Auswirkungen auf einzelne Bei negativen Auswirkungen auf einzelne Applikationen kann selektiv durch Applikationen kann selektiv durch Konfigurationsfiles eingegriffen werden!Konfigurationsfiles eingegriffen werden!

Konfigurationsfiles [1/2]Konfigurationsfiles [1/2]

"Human-readable" XML-Files"Human-readable" XML-Files Bestimmen die Regeln für die Suche Bestimmen die Regeln für die Suche

nach der richtigen Assemblynach der richtigen Assembly("Assembly Binding")("Assembly Binding") Wo suchen?Wo suchen? Welche Version verwenden?Welche Version verwenden?

Konfigurationsfiles [2/2]Konfigurationsfiles [2/2]

Application Configuration FilesApplication Configuration Files Bestimmen für jede Applikation einzeln, Bestimmen für jede Applikation einzeln,

wie und wo nach Assemblies gesucht wirdwie und wo nach Assemblies gesucht wird

Publisher Configuration FilesPublisher Configuration Files Leiten Aufrufe an einzelne Shared Leiten Aufrufe an einzelne Shared

Assemblies auf neuere Versionen um (bei Assemblies auf neuere Versionen um (bei Bugfixes)Bugfixes)

Machine Configuration FilesMachine Configuration Files Gelten global für den gesamten ComputerGelten global für den gesamten Computer Überschreiben Application ConfigurationÜberschreiben Application Configuration

Konfigurationsfiles editierenKonfigurationsfiles editieren

„„Per Hand“ mit NotepadPer Hand“ mit Notepad Mit PlugIns der Management-KonsoleMit PlugIns der Management-Konsole

Windows XP: Windows XP: Systemsteuerung Systemsteuerung Verwaltung Verwaltung .NET Framework Konfiguration.NET Framework Konfiguration

Deployment Szenario 1Deployment Szenario 1

Einfaches XCopy DeploymentEinfaches XCopy Deployment Alle Files von MyOffice sollen in ein Alle Files von MyOffice sollen in ein

ApplikationsverzeichnisApplikationsverzeichnis

Deployment Szenario 1Deployment Szenario 1

Global Assembly Cache

C:\WINNT\ASSEMBLY

Applikationsverzeichnis

C:\PROGRAMME\MYOFFICE

C:\PROGRAMME\MYOFFICE\TOOLS

MyCalc.EXEMyCalc.EXE

MySpeller.DLLMySpeller.DLL

MyText.EXEMyText.EXE

XCOPY

DemoDemo

Deployment von „MyOffice“ per XCopyDeployment von „MyOffice“ per XCopy

Deployment Szenario 2Deployment Szenario 2

Verschieben von Komponenten in Verschieben von Komponenten in UnterverzeichnisseUnterverzeichnisse MySpeller soll in das Unterverzeichnis \MySpeller soll in das Unterverzeichnis \

Tools unterhalb des Applikations-Tools unterhalb des Applikations-verzeichnis verschoben werdenverzeichnis verschoben werden

Dieser Pfad muß im Application Dieser Pfad muß im Application Configuration File eingetragen werdenConfiguration File eingetragen werden

Deployment Szenario 2Deployment Szenario 2

Global Assembly Cache

C:\WINNT\ASSEMBLY

Applikationsverzeichnis

C:\PROGRAMME\MYOFFICE

C:\PROGRAMME\MYOFFICE\TOOLS

MyCalc.EXEMyCalc.EXE

MyText.EXE.config

MyText.EXE.config

MyText.EXEMyText.EXE

MySpeller.DLLMySpeller.DLL

<?xml version="1.0" encoding="utf-8" ?><configuration> <runtime> <assemblyBinding xmlns="urn:schemas-

microsoft-com:asm.v1"> <probing privatePath="tools;"/> </assemblyBinding> </runtime></configuration>

Wo istMySpeller?

DemoDemo

Verschieben der Komponente Verschieben der Komponente „MySpeller“„MySpeller“

Deployment Szenario 3Deployment Szenario 3

"MySpeller" soll eine Shared Assembly "MySpeller" soll eine Shared Assembly werdenwerden MySpeller muß einen StrongName MySpeller muß einen StrongName

bekommenbekommen MySpeller.DLL muß in den GAC kopiert MySpeller.DLL muß in den GAC kopiert

werden (Tool: GACUtil.EXE oder VS) werden (Tool: GACUtil.EXE oder VS) Die Runtime lädt jetzt MySpeller aus dem Die Runtime lädt jetzt MySpeller aus dem

GAC, und nicht mehr aus dem GAC, und nicht mehr aus dem ApplikationsverzeichnisApplikationsverzeichnis

Deployment Szenario 3Deployment Szenario 3

Global Assembly Cache

C:\WINNT\ASSEMBLY

Applikationsverzeichnis

C:\PROGRAMME\MYOFFICE

C:\PROGRAMME\MYOFFICE\TOOLS

MyCalc.EXEMyCalc.EXE

MyText.EXE.config

MyText.EXE.config

MyText.EXEMyText.EXE

MySpeller.DLLMySpeller.DLL

MySpeller.DLLMySpeller.DLL

Wo istMySpeller?

DemoDemo

Signieren von „MySpeller“ und Signieren von „MySpeller“ und Installation im Global Assembly CacheInstallation im Global Assembly Cache

Deployment Szenario 4 [1/2]Deployment Szenario 4 [1/2]

Ein neue Version von MySpeller ist Ein neue Version von MySpeller ist verfügbarverfügbar

Alle Applikationen, die MySpeller Alle Applikationen, die MySpeller verwenden, sollen mit der neuen verwenden, sollen mit der neuen Version arbeitenVersion arbeiten Ein Publisher Policy File kann die Aufrufe Ein Publisher Policy File kann die Aufrufe

der alten Version an die neue Version der alten Version an die neue Version "umleiten""umleiten"

Deployment Szenario 4Deployment Szenario 4

Global Assembly Cache

C:\WINNT\ASSEMBLY

Applikationsverzeichnis

C:\PROGRAMME\MYOFFICE

C:\PROGRAMME\MYOFFICE\TOOLS

MyCalc.EXEMyCalc.EXE

MyText.EXE.config

MyText.EXE.config

MyText.EXEMyText.EXE

MySpeller.DLLMySpeller.DLL

MySpeller.DLLVersion 1.0

MySpeller.DLLVersion 1.0

policy.1.0.MySpeller.DLL

policy.1.0.MySpeller.DLL

MySpeller.DLLVersion 1.5

MySpeller.DLLVersion 1.5

<configuration> <runtime> <assemblyBinding xmlns="…" <dependentAssembly> <assemblyIdentity name="MySpeller" <bindingRedirect oldVersion="1.0.0.0" newVersion="1.5.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>

</configuration>

DemoDemo

Deployment der neuen Version von Deployment der neuen Version von „MySpeller“ und Konfiguration der „MySpeller“ und Konfiguration der Client-ApplikationenClient-Applikationen

Deployment Szenario 4 [2/2]Deployment Szenario 4 [2/2]

Moment mal… einige Applikationen Moment mal… einige Applikationen haben Probleme mit dieser neuen haben Probleme mit dieser neuen Version!Version! Einzelne Applikationen können in ihrem Einzelne Applikationen können in ihrem

Application Configuration File bestimmen, Application Configuration File bestimmen, daß die vorherige Version verwendet wird daß die vorherige Version verwendet wird ("Safe Mode")("Safe Mode")

Deployment Szenario 4Deployment Szenario 4

Global Assembly Cache

C:\WINNT\ASSEMBLY

Applikationsverzeichnis

C:\PROGRAMME\MYOFFICE

C:\PROGRAMME\MYOFFICE\TOOLS

MyCalc.EXEMyCalc.EXE

MyText.EXE.config

MyText.EXE.config

MyText.EXEMyText.EXE

MySpeller.DLLMySpeller.DLL

MySpeller.DLLVersion 1.0

MySpeller.DLLVersion 1.0

policy.1.0.MySpeller.DLL

policy.1.0.MySpeller.DLL

MySpeller.DLLVersion 1.5

MySpeller.DLLVersion 1.5<?xml version="1.0" encoding="utf-8" ?>

<configuration> <runtime> <assemblyBinding <dependentAssembly> <assemblyIdentityname="MySpeller"/> <publisherPolicy apply="no"/> </dependentAssembly> </assemblyBinding> </runtime></configuration>

DemoDemo

„„MyCalc“ zur Verwendung der MyCalc“ zur Verwendung der vorherigen Version von „MySpeller“ vorherigen Version von „MySpeller“ zwingenzwingen

Komponenten mit integrierterKomponenten mit integrierterSetup-RoutineSetup-Routine Manche Komponenten funktionieren Manche Komponenten funktionieren

nicht „standalone“, sondern erfordern nicht „standalone“, sondern erfordern Konfiguration der UmgebungKonfiguration der Umgebung Erstellen von DatenbankenErstellen von Datenbanken Setup von Message QueuesSetup von Message Queues

Komponenten können selbst Code Komponenten können selbst Code enthalten, der bei ihrer (De-)Installation enthalten, der bei ihrer (De-)Installation ausgeführt wirdausgeführt wird

Die Custom Installer-KlasseDie Custom Installer-Klasse

Eine Custom Installer-Klasse innerhalb Eine Custom Installer-Klasse innerhalb der Komponente erbt von der Komponente erbt von System.Configuration.Install.InstallerSystem.Configuration.Install.Installer

Überschreibt entsprechende Methoden, Überschreibt entsprechende Methoden, um bei der Installation Aktionen um bei der Installation Aktionen auszuführenauszuführen InstallInstall UnInstallUnInstall RollbackRollback

Aufruf der Custom Installer -MethodenAufruf der Custom Installer -Methoden

Komandozeilen-Tool Komandozeilen-Tool InstalUtil.exeInstalUtil.exe Custom Action innerhalb einer Custom Action innerhalb einer

Microsoft Installer Package (MSI-Datei)Microsoft Installer Package (MSI-Datei)

DemoDemo

„„MySpeller“-Datenbank über MySpeller“-Datenbank über InstallUtil.exe installierenInstallUtil.exe installieren

Setup-Projekte mit VS .NETSetup-Projekte mit VS .NET

Visual Studio . NET bietet gute Visual Studio . NET bietet gute Unterstützung der MSI-TechnologieUnterstützung der MSI-Technologie Projekttyp „Setup Project“Projekttyp „Setup Project“ Wizard hilft bei der ErstellungWizard hilft bei der Erstellung

.NET-Deployment Features sind .NET-Deployment Features sind integriertintegriert Installation von Shared Assemblies in den Installation von Shared Assemblies in den

Global Assembly CacheGlobal Assembly Cache Aufruf von CustomInstaller-Methoden Aufruf von CustomInstaller-Methoden

durch Custom Actionsdurch Custom Actions

Vorteile der MSI-TechnologieVorteile der MSI-Technologie

Transaktionsbasierte InstallationTransaktionsbasierte Installation „„Alles oder nichts“Alles oder nichts“ Saubere DeinstallationSaubere Deinstallation

LoggingLogging Unterstützung von InstallationsmodiUnterstützung von Installationsmodi

„„Vollständig“, „Typisch“, Vollständig“, „Typisch“, „Benutzerdefiniert“„Benutzerdefiniert“

Dritthersteller-Tool (InstallShield, WISE) Dritthersteller-Tool (InstallShield, WISE) wird benötigt wird benötigt

Konfigurierbare BenutzeroberflächeKonfigurierbare Benutzeroberfläche

DemoDemo

MSI-Paket für „MyOffice“ mit Visual MSI-Paket für „MyOffice“ mit Visual Studio .NET erstellenStudio .NET erstellen

Deployment der Runtime [1/2]Deployment der Runtime [1/2]

Windows .NET Server enthält als erstes Windows .NET Server enthält als erstes Betriebssystem die .NET RuntimeBetriebssystem die .NET Runtime

Für alle anderen Systeme ab Windows Für alle anderen Systeme ab Windows 98 kann die .NET Runtime separat 98 kann die .NET Runtime separat installiert werdeninstalliert werden

Deployment der Runtime [2/2]Deployment der Runtime [2/2]

Standalone Executable: Standalone Executable: DotNetFx.EXEDotNetFx.EXE Ca. 21 MB groß, installiert komplette Ca. 21 MB groß, installiert komplette

RuntimeRuntime

DotNetFx.EXE kann per Bootstrapper DotNetFx.EXE kann per Bootstrapper installiert werden (silent mode)installiert werden (silent mode) Siehe Siehe

http://msdn.microsoft.com/library/defaulthttp://msdn.microsoft.com/library/default.asp?url=/.asp?url=/librarylibrary//en-usen-us//dnnetdepdnnetdep//htmlhtml//vsredistdeploy.aspvsredistdeploy.asp

Vielen Dank!Vielen Dank!

Fragen kostet nichts…Fragen kostet nichts…