Auswählen einer Bereitstellungsmethode
Aktualisiert: November 2007
In den meisten Fällen erfolgt die Bereitstellung von Visual C++-Anwendungen mithilfe der Windows Installer-Bereitstellung. Weitere Informationen über in Visual Studio unterstützte Bereitstellungsmethoden und Alternativen finden Sie unter Auswählen einer Bereitstellungsstrategie und Alternativen bei der Bereitstellung. Die ClickOnce-Bereitstellung von systemeigenen Visual C++-Anwendungen wird in Visual Studio 2005 nicht unterstützt. Es ist jedoch möglich, Visual C++-Anwendungen über die Befehlszeile mit ClickOnce bereitzustellen. Weitere Informationen finden Sie unter ClickOnce-Bereitstellung für Visual C++-Anwendungen.
Visual C++-Bibliotheken sind parallele Assemblys
Visual Studio 2005 installiert Visual C++-Bibliotheken als freigegebene parallele Assemblys. Standardmäßig werden alle mit Visual Studio 2005 erstellten Anwendungen als isolierte Anwendungen erstellt. Die auf diese Weise erstellten Anwendungen verfügen über ein Manifest, das entweder als Ressource eingebettet oder der endgültigen Binärdatei als externe Datei zugeordnet ist. Damit die Visual C++-Anwendung auf einem Computer ausgeführt werden kann, auf dem Visual C++ nicht installiert ist, müssen Sie die Visual C++-Assemblys ggf. mit der Anwendung verteilen und sicherstellen, dass diese auf dem Zielcomputer installiert sind.
Verteilen von Visual C++-Bibliotheken
Es gibt drei Möglichkeiten, Visual C++-DLLs zu verteilen:
Verwenden Sie verteilbare Visual C++-Mergemodule, um eine bestimmte Visual C++-Bibliothek als freigegebene parallele Assembly im systemeigenen Assemblycache (Ordner WinSxS) zu installieren. Dies ist die empfohlene Methode zum Verteilen von Visual C++-Bibliotheken. Der Zugriff auf diesen Ordner erfordert, dass die Installer-Anwendung von einem Benutzer ausgeführt wird, der über Administratorrechte verfügt. Weitere Informationen finden Sie unter Verteilen mit Mergemodulen. Ein Beispiel für diese Bereitstellung finden Sie unter Gewusst wie: Bereitstellen eines Setup- und Bereitstellungs-Projekts.
Verwenden Sie Visual C++ Redistributable Package (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_ia64.exe), um alle Visual C++-Bibliotheken als freigegebene parallele Assembly im systemeigenen Assemblycache (Ordner WinSxS) zu installieren. Dieses Paket wird von Visual Studio im Ordner %WindowsSdkDir%\Bootstrapper\Packages\ installiert und kann von der Microsoft-Downloadsite Microsoft Visual C++ 2005 Redistributable Package (x86) heruntergeladen werden. Das Verteilen von Visual C++-Bibliotheken mit diesem Paket empfiehlt sich für Anwendungen, die in Visual C++ Express erstellt wurden, und wenn eine gleichzeitige Bereitstellung aller Visual C++-Bibliotheken gewünscht ist. Ein Beispiel zur Verwendung dieses Pakets finden Sie unter Gewusst wie: Bereitstellen mit XCopy.
Installieren Sie eine bestimmte Visual C++-Assembly als private Assembly für die Anwendung, indem Sie Dateien aus dem Verzeichnis Programme\Microsoft Visual Studio 8\VC\Redist verwenden. Diese Methode wird empfohlen, um Benutzern ohne Administratorrechte die Installation von Anwendungen zu ermöglichen oder um eine Anwendung über eine Freigabe auszuführen. Ein Beispiel finden Sie unter Gewusst wie: Bereitstellen mit XCopy.
Hinweis: |
---|
Unter Windows Server 2000 werden zum Verteilen von Visual C++-Bibliotheken nur verteilbare Mergemodule unterstützt. |
Beim Installieren von Visual C++-Bibliotheken mithilfe von verteilbaren Mergemodulen werden die Assemblys als freigegebene parallele Assemblys im systemeigenen Assemblycache (Ordner WinSxS) bereitgestellt. Der Zugriff auf diesen Ordner erfordert, dass die Installer-Anwendung von einem Benutzer ausgeführt wird, der über Administratorrechte verfügt.
Wenn eine Anwendung von einem Benutzer ohne Administratorrechte ausgeführt wird, kann die Anwendung die Visual C++-Assemblys nicht bereitstellen und daher nicht ausgeführt werden. Für einige Produkte ist zwar eine Einzelinstallation für jeden Benutzer möglich. Die Mergemodule installieren jedoch die Bibliotheken in freigegebenen Speicherorten und haben daher Auswirkungen für alle Benutzer des Systems. In beiden Szenarien und in ähnlichen Fällen müssen die erforderlichen Assemblys als private parallele Assemblys für die Anwendung eines bestimmten Benutzers installiert werden.
Bei dieser Vorgehensweise brauchen Sie lediglich einen Ordner mit DLLs und Manifesten für abhängige Assemblys in den lokalen Ordner der Anwendung zu kopieren. Das Ladeprogramm des Betriebssystems sucht beim Ausführen der Anwendung weiterhin zunächst im Ordner WinSxS nach abhängigen Assemblys. Wenn jedoch keine zugehörige Assembly gefunden werden kann, lädt das Ladeprogramm des Betriebssystems eine private Assembly aus diesem Unterverzeichnis.
Eine falsche Verteilung von Visual C++-Bibliotheken kann zu Laufzeitfehlern während der Ausführung einer Anwendung führen, die diese Bibliotheken benötigt. Eine Liste potenzieller Fehler und Lösungen zu diesen Fehlern finden Sie unter Problembehandlung bei isolierten Anwendungen und parallelen Assemblys (C/C++).
Manifest erforderlich
Das Verteilen von ohne Manifest erstellten C/C++-Anwendungen wird nicht unterstützt. Visual C++-Bibliotheken können nur von C/C++-Anwendungen verwendet werden, die durch ein Manifest an diese Bibliotheken gebunden sind. Jede in Visual C++ 2005 erstellte C/C++-Binärdatei muss ein Manifest enthalten, das die Abhängigkeit von Visual C++-Bibliotheken beschreibt. Nach dieser Vorgabe werden Visual Studio-Projekte standardmäßig eingerichtet, und auch das Standardverhalten des Linkers, der die endgültige Binärdatei aus dem Objektcode erstellt, erfüllt diese Vorgabe.
In jedem Fall wird empfohlen, dass das Manifest intern ist. Bei einer EXE-Datei kann das Manifest jedoch extern sein (dieses Szenario wird unterstützt, aber nicht empfohlen).
Anwendungen, bei denen davon ausgegangen wird, dass sich abhängige DLLs entweder im lokalen Ordner der Anwendung oder in einem von einer Umgebungsvariablen angegebenen Ordner befinden, können möglicherweise auch ein Sicherheitsrisiko darstellen. Solche Anwendungen sind nach der Bereitstellung außerdem schwieriger zu warten.
Dynamische statt statische Verknüpfungen
Es wird nicht empfohlen, C/C++-Anwendungen mit einer statischen Verknüpfung zu Visual C++-Bibliotheken zu verteilen. Oft wird fälschlicherweise angenommen, dass eine statische Verknüpfung mit Visual C++-Bibliotheken in einem Programm die Anwendungsleistung wesentlich verbessert. Das dynamische Laden von Visual C++-Bibliotheken wirkt sich jedoch in nahezu allen Fällen kaum auf die Leistung aus. Außerdem lassen sich Anwendungen und die abhängigen Bibliotheken nicht vom Anwendungsentwickler oder von Microsoft warten, wenn sie über statische Verknüpfungen verfügen. Gehen wir z. B. von einer Anwendung aus, die statisch mit einer bestimmten Bibliothek verknüpft ist und auf einem Clientcomputer mit einer neuen Version dieser Bibliothek ausgeführt wird. In der Anwendung wird noch Code aus der Vorgängerversion dieser Bibliothek verwendet, und Verbesserungen z. B. der Sicherheit können nicht genutzt werden. Entwicklern von C/C++-Anwendungen wird dringend empfohlen, das Wartungsszenario zu durchdenken, bevor eine Entscheidung für die statische Verknüpfung der abhängigen Bibliotheken getroffen wird. Wann immer die Möglichkeit besteht, sollten dynamische Verknüpfungen verwendet werden.
Siehe auch
Konzepte
Auswählen einer Bereitstellungsstrategie