Deployment und Versioning von.NET Applikationen Uwe Baumann Technologieberater Developer Group...
-
Upload
suse-schlotman -
Category
Documents
-
view
104 -
download
0
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
[email protected]@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…