DOC: Global Assembly Cache (GAC) APIs sind nicht dokumentiert, in der .NET Framework Software Development Kit (SDK)-Dokumentation

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 317540 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Die systemeigenen Code Anwendungsprogrammierschnittstellen (APIs), die Interaktion mit dem globalen Assemblycache (GAC) ermöglichen, sind nicht in der Dokumentation zu .NET Framework Software Development Kit (SDK) dokumentiert.

Weitere Informationen

Warnung : sind nicht in Ihrer Anwendung diese APIs verwenden, um Assemblybindungen durchzuführen oder um das Vorhandensein von Assemblys oder andere zur Laufzeit, Entwicklung oder Entwurfszeitvorgänge zu testen. Nur Verwaltungstools und Setup-Programme müssen diese APIs verwenden. Wenn Sie im GAC, dies direkt verfügbar macht die Anwendung Assembly Bindung Fragility oder kann die Anwendung nicht ordnungsgemäß auf zukünftige Versionen von .NET Framework funktionieren aufgrund.

Der GAC speichert Assemblys, die alle Anwendungen auf einem Computer gemeinsam verwendet werden. Struktur im GAC und den tatsächlichen Speicherort ist nicht dokumentiert und unterliegt Änderungen in zukünftigen Versionen von .NET Framework und Microsoft Windows-Betriebssystem.

Die einzige unterstützte Methode zu Zugriff-Assemblys im GAC besteht über die APIs, die in diesem Artikel dokumentiert sind.

Die meisten Anwendungen müssen diese APIs verwenden, da die Assemblybindung automatisch von der common Language Runtime ausgeführt wird. Nur benutzerdefinierte Setup-Programme oder Verwaltungstools müssen diese APIs verwenden. Microsoft Windows Installer bietet systemeigene Unterstützung für das Installieren von Assemblys im GAC.

Weitere Informationen über Assemblys und im GAC finden Sie unter .NET Framework SDK.

Verwenden Sie die GAC-API in den folgenden Szenarien:
  • Wenn Sie eine Assembly im GAC installieren.
  • Wenn Sie eine Assembly aus dem GAC entfernen.
  • Wenn Sie eine Assembly aus dem GAC exportieren.
  • Wenn Sie Assemblys aufzählen, die in den GAC zur Verfügung stehen.
Hinweis : muss CoInitialize(Ex) aufgerufen werden, bevor Sie alle Funktionen und Schnittstellen, die in dieser Spezifikation beschrieben werden.

IAssemblyCache-Schnittstelle

IAssemblyCache- Schnittstelle ist die obersten Ebene Schnittstelle, die den Zugriff auf den GAC bereitstellt.

Um eine Instanz der CreateAssemblyCache -API zu erhalten, rufen Sie CreateAssemblyCache -API, wie folgt:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
die Parameter wie folgt definiert sind:
  • PpAsmCache - Zeiger IAssemblyCache- zurückgeben
  • dwReserved

FUSION_INSTALL_REFERENCE-Struktur

FUSION_INSTALL_REFERENCE -Struktur stellt einen Verweis, der vorgenommen wird, wenn eine Anwendung eine Assembly im GAC installiert hat dar.
    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme;     // Contains one of the pre-defined GUIDs.
        LPCWSTR szIdentifier;  // Unique identifier for the application that installs this  assembly.
        LPCWSTR szNonCannonicalData;  // Data is description; relevant to the GUID above. 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
				
die Felder der Struktur wie folgt definiert:
  • CbSize - die Größe der Struktur in Bytes.
  • DwFlags - reserviert, muss NULL sein.
  • GuidScheme - die Entität, die den Verweis hinzufügt.
  • SzIdentifier - eine eindeutige Zeichenfolge, die die Anwendung identifiziert, die die Assembly installiert.
  • SzNonCannonicalData - eine Zeichenfolge, die nur von der Entität verstanden wird, die den Verweis hinzufügt. Der GAC speichert nur diese Zeichenfolge.
Mögliche Werte für das GuidScheme -Feld können eine der folgenden sein:
  • FUSION_REFCOUNT_MSI_GUID - die Assembly wird von einer Anwendung verwiesen, die mithilfe von Windows Installer installiert wurde. Feld SzIdentifier auf MSI festgelegt ist, und SzNonCannonicalData auf Windows Installer festgelegt ist. Dieses Schema muss nur von Windows Installer selbst verwendet werden.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - die Assembly wird von einer Anwendung verwiesen, die in Software angezeigt wird. Das Feld SzIdentifier ist das Token, das zum Registrieren der Anwendung mit Software verwendet wird.
  • FUSION_REFCOUNT_FILEPATH_GUID - die Assembly wird von einer Anwendung verwiesen, die durch eine Datei im Dateisystem dargestellt wird. Das Feld SzIdentifier ist der Pfad zu dieser Datei.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID - die Assembly wird von einer Anwendung verwiesen, die nur durch eine nicht transparente Zeichenfolge dargestellt wird. SzIdentifier ist diese nicht transparente Zeichenfolge. Der GAC führt keine Existenz nicht transparente Verweise gesucht, wenn Sie diese entfernen.

ASSEMBLY_INFO-Struktur

ASSEMBLY_INFO- Struktur stellt Informationen über eine Assembly im Assemblycache dar.

Die Felder der Struktur sind wie folgt definiert:
  • CbAssemblyInfo - Größe der Struktur in Bytes. Ergänzungen zu der Struktur ermöglicht in zukünftigen Version von .NET Framework.
  • DwAssemblyFlags - gibt eine oder mehrere Bits ASSEMBLYINFO_FLAG_ 1 .
  • UliAssemblySizeInKB - die Größe der Dateien, die die Assembly in Kilobyte bilden (KB).
  • PszCurrentAssemblyPathBuf - enthält ein Zeiger auf einen Zeichenfolgenpuffer, der den aktuellen Pfad des Verzeichnisses enthält die Dateien, die die Assembly bilden. Der Pfad muss mit Null enden.
  • CchBuf - Größe der Puffer, dem auf das Feld PszCurrentAssemblyPathBug verweist.
DwAssemblyFlags kann eine der folgenden Werte haben:
  • ASSEMBLYINFO_FLAG__INSTALLED - gibt an, dass die Assembly tatsächlich installiert ist. In aktuellen Version von .NET Framework immer festgelegt.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - nie legen Sie in der aktuellen Version der .NET Framework.

IAssemblyCache::UninstallAssembly-Methode

Die IAssemblyCache::UninstallAssembly -Methode entfernt einen Verweis auf eine Assembly aus dem GAC. Wenn andere Anwendungen keine andere Verweise auf die Assembly halten, werden die Dateien, aus denen die Assembly besteht aus dem GAC entfernt.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
Die Parameter sind wie folgt definiert:
  • DwFlags - keine Kennzeichen definiert. NULL muss sein.
  • PszAssemblyName - der Name der Assembly. Einer 0 (null) beendet Unicode-Zeichenfolge.
  • pRefData - ein Zeiger auf eine FUSION_INSTALL_REFERENCE -Struktur. Obwohl dies nicht empfohlen wird, kann dieser Parameter null sein. Die Assembly ist ohne einen Verweis Anwendung installiert, oder alle Verweise auf vorhandene Anwendung sind verschwunden.
  • PulDisposition - Zeiger auf eine ganze Zahl, die Aktion angibt, die von der Funktion durchgeführt wird.
Hinweis : Wenn PulDisposition nicht null ist, PulDisposition enthält eines der folgenden Werte:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - die Assembly Dateien aus dem GAC entfernt wurden.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - die Anwendung wird die Assembly verwenden. Dieser Wert wird unter Microsoft Windows 95 und Microsoft Windows 98 zurückgegeben.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - die Assembly ist nicht im GAC vorhanden.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - nicht verwendet.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - die Assembly wurde nicht aus dem GAC entfernt, da eine andere Anwendung Verweis vorhanden ist.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - der Verweis, der im pRefData angegeben ist, wurde nicht im GAC gefunden.
Die Rückgabewerte sind folgendermaßen definiert:
  • S_OK - die Assembly wurde deinstalliert.
  • S_FALSE - der Vorgang erfolgreich war, aber die Assembly wurde nicht aus dem GAC entfernt. Der Grund ist in PulDisposition beschrieben.

IAssemblyCache::QueryAssemblyInfo-Methode

Die IAssemblyCache::QueryAssemblyInfo -Methode ruft Informationen über eine Assembly aus dem GAC.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
Die Parameter sind wie folgt definiert:
  • DwFlags - QUERYASMINFO_FLAG_VALIDATE oder QUERYASMINFO_FLAG_GETSIZE :
    • * _VALIDATE -führt eine Validierung der Dateien im GAC gegen das Assemblymanifest, einschließlich Hashüberprüfung und Signaturüberprüfung für starken Namen.
    • * _GETSIZE -gibt die Größe aller Dateien in der Assembly (Datenträger Speicherbedarf) zurück. Wenn dies nicht angegeben ist, wird das ASSEMBLY_INFO::uliAssemblySizeInKB -Feld nicht geändert.
  • PszAssemblyName - Name der Assembly, die abgefragt wird.
  • pAsmInfo - Zeiger auf die zurückgegebene ASSEMBLY_INFO- Struktur.

IAssemblyCache::InstallAssembly-Methode

Die IAssemblyCache::InstallAssembly -Methode fügt eine neue Assembly zum GAC. Die Assembly muss im Dateisystem gespeichert werden und wird in den GAC kopiert.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
die Parameter sind wie folgt definiert:
  • DwFlags - höchstens, eines der Bits die IASSEMBLYCACHE_INSTALL_FLAG_ 1 Werte können angegeben werden:
    • * _REFRESH - Wenn die Assembly ist bereits im GAC installiert und die Datei Versionsnummern der zu installierende Assembly entsprechen oder höher, die Dateien ersetzt werden.
    • * _FORCE_REFRESH -die Dateien von einer vorhandenen Assembly unabhängig von deren Versionsnummer überschrieben werden.
  • PszManifestFilePath - eine Zeichenfolge auf der dynamic-linked Bibliothek (DLL), die das Assemblymanifest enthält. Andere Assemblydateien müssen im selben Verzeichnis wie die DLL befinden, die das Assemblymanifest enthält.
  • pRefData - ein Zeiger auf eine FUSION_INSTALL_REFERENCE , der die Anwendung angibt, die Namen die Assembly installiert wird. Obwohl dies nicht empfohlen wird, kann dieser Parameter null sein, dies bleibt jedoch Assembly ohne jeder Anwendung Verweis.

IAssemblyName-Schnittstelle

Die IAssemblyName -Schnittstelle stellt einen Assemblynamen. Ein Assemblyname enthält einen vordefinierten Satz von Name / Wert-Paaren. Die Name der Assembly ist in .NET Framework SDK ausführlich beschrieben.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
Eine Instanz des IAssemblyName wird durch Aufrufen der CreateAssemblyNameObject-API abgerufen:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
die Parameter wie folgt definiert:
  • PpAssemblyNameObj - Zeiger auf einen Speicherbereich, der den Zeiger IAssemblyName empfängt, der erstellt wird.
  • SzAssemblyName - eine Zeichenfolgendarstellung der Name der Assembly oder ein vollständiger Assemblyverweis, der durch DwFlags bestimmt wird. Die Zeichenfolgenentsprechung kann null sein.
  • DwFlags - NULL oder mehr der Bits, die in der CREATE_ASM_NAME_OBJ_FLAGS- Enumeration definiert sind.
  • PvReserved - muss null sein.

CREATE_ASM_NAME_OBJ_FLAGS-Enumeration

CREATE_ASM_NAME_OBJ_FLAGS- Enumeration enthält die folgenden Werte:
  • CANOF_PARSE_DISPLAY_NAME - Wenn dieses Flag festgelegt ist, der SzAssemblyName -Parameter ist ein vollständiger Assemblyname und wird analysiert, um die einzelnen Eigenschaften. Wenn das Flag nicht angegeben ist, "Name" der Anteil des den Namen der Assembly von SzAssemblyName ist.
  • CANOF_SET_DEFAULT_VALUES - ist dieses Flag angegeben, bestimmte Eigenschaften, wie Prozessorarchitektur, werden auf ihre Standardwerte festgelegt.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

ASM_NAME-Enumeration

Der EIGENSCHAFTSNAME ASM_NAME- Enumeration beschreibt die gültigen Namen von Name-Wert-Paaren in eine Assemblynamen. Finden Sie im .NET Framework SDK, eine Beschreibung dieser Eigenschaften.
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
				

IAssemblyName::SetProperty-Methode

Die IAssemblyName::SetProperty -Methode den Namen der Assembly ein Name / Wert-Paar hinzugefügt oder, wenn ein Name-Wert-Paar mit demselben Namen bereits vorhanden ist, ändert oder löscht den Wert eines Name-Wert-Paares.
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
Die Parameter sind wie folgt definiert:
  • PropertyId angegeben wird - die Kennung, die den Namensteil Name / Wert-Paar darstellt, die hinzugefügt werden oder geändert werden. Gültige Eigenschaft IDs werden in der ASM_NAME- Enumeration definiert.
  • PvProperty - ein Zeiger auf einen Puffer, der den Wert der Eigenschaft enthält.
  • CbProperty - die Länge des Puffers PvProperty in Bytes. Wenn CbProperty NULL ist, wird das Name-Wert-Paar aus Name der Assembly entfernt.

IAssemblyName::GetProperty-Methode

Die IAssemblyName::GetProperty -Methode ruft den Wert eines Name-Wert-Paars der Assemblyname, der den Namen angibt.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
Die Parameter sind wie folgt definiert:
  • PropertyId angegeben wird - die Kennung, die den Namen des Name-Wert-Paar darstellt, dessen Wert abgerufen werden soll. Angegebene Eigenschaft IDs werden in der ASM_NAME- Enumeration definiert.
  • PvProperty - ein Zeiger auf einen Puffer, der den Wert der Eigenschaft enthalten ist.
  • CbProperty - die Länge des Puffers PvProperty in Bytes.

IAssemblyName::Finalize-Methode

Die IAssemblyName::Finalize -Methode fixiert ein Assemblyname. IAssemblyName::SetProperty zusätzliche Aufrufe schlagen fehl, nachdem diese Methode aufgerufen wurde.
HRESULT Finalize();

IAssemblyName::GetDisplayName-Methode

Die IAssemblyName::GetDisplayName -Methode gibt eine Zeichenfolgendarstellung der Name der Assembly zurück.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
Die Parameter sind wie folgt definiert:
  • SzDisplayName - ein Zeiger auf einen Puffer, der den Anzeigenamen enthalten ist. Der Anzeigename wird in Unicode zurückgegeben.
  • PccDisplayName - die Größe des Puffers in Zeichen (bei der Eingabe). Die Länge der zurückgegebenen Anzeigename (bei Rückgabe).
  • DwDisplayFlags - ein oder mehrere der Bits in der ASM_DISPLAY_FLAGS- Enumeration definiert:
    • * _VERSION -enthält die Versionsnummer als Teil des Namens angezeigt.
    • * _CULTURE -enthält die Kultur.
    • * _PUBLIC_KEY_TOKEN -Token des öffentliche Schlüssels enthält.
    • * _PUBLIC_KEY -enthält den öffentlichen Schlüssel.
    • * _CUSTOM -benutzerdefinierten Teil des Assemblynamens enthält.
    • * _PROCESSORARCHITECTURE -enthält die Prozessorarchitektur.
    • * _LANGUAGEID -enthält die Sprachen-ID.
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
				

IAssemblyName::GetName-Methode

Die IAssemblyName::GetName -Methode gibt den Namen Teil den Namen der Assembly zurück.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
Die Parameter sind wie folgt definiert:
  • LpcwBuffer - Größe des Puffers PwszName (bei der Eingabe). Länge des Namens (bei Rückgabe).
  • PwszName - Zeiger an den Puffer, der der Name der Name der Assembly enthalten.

IAssemblyName::GetVersion-Methode

Die IAssemblyName::GetVersion -Methode gibt den Version Teil den Namen der Assembly.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
Die Parameter sind wie folgt definiert:
  • PdwVersionHi - Zeiger auf ein DWORD, das die oberen 32 Bits der Versionsnummer enthält.
  • PdwVersionLow - Zeiger auf ein DWORD, die die unteren 32 Bits der Versionsnummer enthalten.

IAssemblyName:: isEqual-Methode

IAssemblyName:: IsEqual -Methode vergleicht den Assemblynamen zu einem anderen Assemblynamen.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
Die Parameter sind wie folgt definiert:
  • pName - Assemblyname, der mit verglichen werden soll.
  • DwCmpFlags - gibt an, welcher Teil der Assembly Name, der im Vergleich verwendet werden.
Mindestens eines der Bits in der ASM_CMP_FLAGS- Enumeration definierte Werte:
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true. However, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparison.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       
				
die zurückgegebenen Werte sind wie folgt:
  • S_OK: -die Namen gemäß den Vergleichskriterien übereinstimmen.
  • S_FALSE: -die Namen stimmen nicht überein.

IAssemblyName::Clone-Methode

Die IAssemblyName::Clone -Methode erstellt eine Kopie des Assemblynamens einer.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

IAssemblyEnum-Schnittstelle

IAssemblyEnum -Schnittstelle listet die Assemblys im GAC.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Um eine Instanz der CreateAssemblyEnum -API zu erhalten, rufen Sie CreateAssemblyNameObject -API, wie folgt:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
die Parameter wie folgt definiert sind:
  • pEnum - Zeiger auf einen Speicherbereich, der der IAssemblyEnum Zeiger enthält.
  • pUnkReserved - muss null sein.
  • pName - eine Assembly-Name, die Enumeration Filtern verwendet wird. Kann zum Auflisten aller Assemblys im GAC null sein.
  • DwFlags - genau ein Bit aus der ASM_CACHE_FLAGS- Enumeration.
  • PvReserved - muss NULL sein.

ASM_CACHE_FLAGS-Enumeration

ASM_CACHE_FLAGS- Enumeration enthält die folgenden Werte:
  • ASM_CACHE_ZAP - Listet den Cache des vorkompilierten Assemblys mit Ngen.exe.
  • ASM_CACHE_GAC - Listet im GAC.
  • ASM_CACHE_DOWNLOAD - Listet die Assemblys wurden, die heruntergeladenen on-Demand oder wurden, verborgen kopiert.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

IAssemblyEnum::GetNextAssembly-Methode

Die IAssemblyEnum::GetNextAssembly -Methode listet die Assemblys im GAC.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
Die Parameter sind wie folgt definiert:
  • PvReserved - muss null sein.
  • PpName - Zeiger auf einen Speicherbereich, der den Schnittstellenzeiger auf den Assemblynamen des nächsten Assembly zu erhalten, die aufgelistet ist.
  • DwFlags - muss NULL sein.

IInstallReferenceItem-Schnittstelle

IInstallReferenceItem -Schnittstelle stellt einen Verweis, der auf eine Assembly im GAC festgelegt wurde dar. Durch die IInstallReferenceEnum -Schnittstelle sind Instanzen von IInstallReferenceIteam zurückgegeben.
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

IInstallReferenceItem::GetReference-Methode

Die IInstallReferenceItem::GetReference -Methode gibt eine FUSION_INSTALL_REFERENCE -Struktur.
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
Die Parameter sind wie folgt definiert:
  • PpRefData - ein Zeiger auf eine FUSION_INSTALL_REFERENCE -Struktur. Der Speicher wird durch die GetReference -Methode zugewiesen und wird freigegeben, wenn IInstallReferenceItem freigegeben wird. Aufrufer müssen einen Verweis auf diese Puffer nicht halten, nach der Veröffentlichung IInstallReferenceItem -Objekt.
  • DwFlags - muss NULL sein.
  • PvReserved - muss null sein.

IInstallReferenceEnum-Schnittstelle

IInstallReferenceEnum -Schnittstelle listet alle Verweise, die für eine Assembly im GAC festgelegt werden.

Hinweis : Verweise, die der Assembly angehören, werden für Änderungen gesperrt, während diese Verweise werden aufgezählt werden.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Um eine Instanz der CreateInstallReferenceEnum -API zu erhalten, rufen Sie CreateInstallReferenceEnum -API, wie folgt:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
die Parameter wie folgt definiert sind:
  • PpRefEnum - ein Zeiger auf einen Speicherbereich, der den Zeiger IInstallReferenceEnum empfängt.
  • pName - Assemblyname für die die Verweise aufgelistet werden.
  • DwFlags - muss NULL sein.
  • PvReserved - muss null sein.

IInstallReferenceEnum::GetNextInstallReferenceItem-Methode

IInstallReferenceEnum::GetNextInstallReferenceItem gibt die nächste Verweisinformationen für eine Assembly zurück.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
Die Parameter sind wie folgt definiert:
  • PpRefItem - Zeiger auf einen Speicherbereich, der den Zeiger IInstallReferenceItem empfängt.
  • DwFlags - muss NULL sein.
  • PvReserved - muss null sein.
Rückgabewerte sind wie folgt:
  • S_OK: -das nächste Element wurde erfolgreich zurückgegeben.
  • S_FALSE: -keine weiteren Elemente.

GetCachePath-API

GetCachePath -API gibt die Position Speicherung der GAC zurück.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Die Parameter sind wie folgt definiert:
  • DwCacheFlags - genau eines der Bits in der ASM_CACHE_FLAGS- Enumeration definiert.
  • PwzCachePath - Zeiger in einen Puffer, der den Pfad des GAC eine Unicode-Zeichenfolge zu erhalten.
  • PcchPath - Länge des Puffers PwszCachePath in Unicode-Zeichen.
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//+---------------------------------------------------------------------------
// 
//  Microsoft Windows
//  File:       fusion.idl
// 
//  Contents:   Fusion Interfaces
// 
//  Classes:
// 
//  Functions:
// 
// 
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation.  All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma once")
cpp_quote("#endif")

interface IAssemblyCache;
interface IAssemblyCacheItem;
interface IAssemblyName;
interface IAssemblyEnum;


typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCache
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCache : IUnknown
{
    cpp_quote("// {8cedc215-ac4b-488b-93c0-a50a49cb2fb8}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID, 0x8cedc215, 0xac4b, 0x488b, 0x93, 0xc0, _
0xa5, 0x0a, 0x49, 0xcb, 0x2f, 0xb8);")
    cpp_quote("")
    cpp_quote("// {b02f9d65-fb77-4f7a-afa5-b391309f11c9}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_FILEPATH_GUID, 0xb02f9d65, 0xfb77, 0x4f7a, 0xaf, 0xa5, 0xb3, 0x91, _
0x30, 0x9f, 0x11, 0xc9);")
    cpp_quote("")
    cpp_quote("// {2ec93463-b0c3-45e1-8364-327e96aea856}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_OPAQUE_STRING_GUID, 0x2ec93463, 0xb0c3, 0x45e1, 0x83, 0x64, 0x32, _
0x7e, 0x96, 0xae, 0xa8, 0x56);")

    cpp_quote(" // {25df0fc1-7f97-4070-add7-4b13bbfd7cb8} // this GUID cannot be used for installing into GAC.")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_MSI_GUID,  0x25df0fc1, 0x7f97, 0x4070, 0xad, 0xd7, 0x4b, 0x13, 0xbb, 0xfd, _
0x7c, 0xb8); ")


    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme; // contains one of the pre-defined guids.
        LPCWSTR szIdentifier;  // unique identifier for app installing this  assembly.
        LPCWSTR szNonCannonicalData;  // data is description; relevent to the guid above 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;

    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;


    typedef struct _ASSEMBLY_INFO
    {
        ULONG cbAssemblyInfo; // size of this structure for future expansion
        DWORD dwAssemblyFlags;
        ULARGE_INTEGER uliAssemblySizeInKB;
        LPWSTR pszCurrentAssemblyPathBuf;
        ULONG   cchBuf; // size of path buf.
    } ASSEMBLY_INFO;

    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH (0x00000002)")

    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED (1)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE (2)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED (3)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING (4)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES (5)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND (6)")

    cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE        (0x00000001)")
    cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE         (0x00000002)")

    // these flags are for dwAssemblyFlags field in struct _ASSEMBLY_INFO  
    cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED       (0x00000001)")
    cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT (0x00000002)")

    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );
 
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
 
    HRESULT CreateAssemblyCacheItem( 
        [in] DWORD dwFlags,
        [in] PVOID pvReserved,
        [out] IAssemblyCacheItem **ppAsmItem,
        [in, optional] LPCWSTR pszAssemblyName  // uncanonicalized, comma separated name=value pairs.
        );
        
    HRESULT CreateAssemblyScavenger
    (
        [out]   IUnknown **ppUnkReserved
    );

    HRESULT InstallAssembly( // if you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );

}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCacheItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCacheItem : IUnknown
{
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE    0")
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST  1")
    cpp_quote("#define STREAM_FORMAT_WIN32_MODULE      2")
    cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST    4")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH (0x00000002)")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED (1)") // first time install
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED (2)") // overwrite, if existing
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED (3)") // existing, 
    

    HRESULT CreateStream(
        [in] DWORD dwFlags,                         // For general API flags
        [in] LPCWSTR pszStreamName,                 // Name of the stream to be passed in
        [in] DWORD dwFormat,                        // format of the file to be streamed in.
        [in] DWORD dwFormatFlags,                   // format-specific flags
        [out] IStream **ppIStream,
        [in, optional] ULARGE_INTEGER *puliMaxSize  // Max size of the Stream.
        );
 
    HRESULT Commit
    (
        [in] DWORD dwFlags, // For general API flags like IASSEMBLYCACHEITEM _COMMIT_FLAG_REFRESH 
        [out, optional] ULONG *pulDisposition
    ); 
 
    HRESULT AbortItem(); // If you have created IAssemblyCacheItem and don't plan to use it, its good idea to call 
    AbortItem before releasing it.

}



/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyName
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
{
    typedef [unique] IAssemblyName *LPASSEMBLYNAME;
    
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
    
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
    
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
    
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true, however, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparision.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       

    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);

    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);

    HRESULT Finalize();

    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);

    HRESULT BindToObject(
        [in]      REFIID               refIID,
        [in]      IUnknown            *pUnkSink, 
        [in]      IUnknown            *pUnkContext,
        [in]      LPCOLESTR            szCodeBase,
        [in]      LONGLONG             llFlags,
        [in]      LPVOID               pvReserved,
        [in]      DWORD                cbReserved,
        [out]     LPVOID               *ppv);


    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
        
    HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);

    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
        
    HRESULT Clone(
        [out] IAssemblyName **pName);
        

}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyEnum
// 
/////////////////////////////////////////////////////////////////////////////// 
[
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
{

    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );

    HRESULT Reset(void);

    HRESULT Clone 
    (
        [out] IAssemblyEnum **ppEnum
    );
    
}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
{
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceEnum
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
{
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
}

#pragma midl_echo("STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ")
#pragma midl_echo("STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ") 
#pragma midl_echo("STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, _
LPVOID pvReserved);             ")
#pragma midl_echo("STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); ")
#pragma midl_echo("STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath); ")
				

Eigenschaften

Artikel-ID: 317540 - Geändert am: Freitag, 4. April 2003 - Version: 3.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Keywords: 
kbmt kbbug kbdocerr kbpending KB317540 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 317540
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com