Ein Fehlermeldung angezeigt, wenn Sie versuchen eine Visual Studio 2005 ClickOnce-Anwendung aktualisieren, nachdem das Zertifikat, das zum Signieren der Installation verwendet wurde, läuft ab

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

Auf dieser Seite

Problembeschreibung

Wenn Sie versuchen, eine ClickOnce des Visual Studio 2005-Anwendung zu aktualisieren, nach Ablauf des Zertifikats, das Sie zum Signieren der Installation verwendet, wird sinngemäß folgende Fehlermeldung:
Das Abonnement stimmt nicht mit die Bereitstellung-Identität überein.

Ursache

Dieses Problem rührt Sie müssen alle ClickOnce-Bereitstellungen mit einem digitalen Zertifikat signieren. Sie können ein abgelaufenes Zertifikat signieren eine ClickOnce-Anwendung. Um ein Update für eine Anwendung bereitzustellen, der ein abgelaufenes Zertifikat verfügt, müssen Sie der Anwendung ein neues Zertifikat zuordnen. Wenn das neue Zertifikat nicht das ursprüngliche Zertifikat übereinstimmt, erhalten Sie die Fehlermeldung, das im Abschnitt "Problembeschreibung" genannt wird.

Lösung

Verwenden Sie eine der folgenden Methoden, um dieses Problem zu beheben.

Methode 1

Aktualisieren den Client Computer die ClickOnce-Anwendung in der Microsoft .NET Framework 2.0 Service Pack 1 (SP1) oder eine höhere Version.

Windows Vista

.NET Framework 3.5 oder .NET Framework 3.5 SP 1 angewendet.

Hinweis: .NET Framework 3.5 enthält viele neue Features, die inkrementell auf .NET Framework 2.0 und 3.0. .NET Framework 3.5 enthält .NET Framework 2.0 SP1 und .NET Framework 3.0 SP1.

Die folgende Datei steht im Microsoft Download Center zum Download zur Verfügung:

Bild minimierenBild vergrößern
Download
Download the .NET Framework 3.5 package now.

Bild minimierenBild vergrößern
Download
Download the .NET Framework 3.5 Service Pack 1 package now.

Weitere Informationen zum Microsoft Support-Dateien herunterladen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
119591So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei wird auf Servern mit verstärkter Sicherheit gespeichert, nicht autorisierte Änderungen an der Datei verhindert.

Windows XP

.NET Framework 2.0 SP1 oder .NET Framework 2.0 Service Pack 2 (SP2) anwenden.

Die folgenden Dateien stehen im Microsoft Download Center zum Download zur Verfügung:

Bild minimierenBild vergrößern
Download
Download the .NET Framework 2.0 Service Pack 1 (x86) package now.

Bild minimierenBild vergrößern
Download
Download the .NET Framework 2.0 Service Pack 1 (x64) package now.

Bild minimierenBild vergrößern
Download
Download the .NET Framework 2.0 Service Pack 2 package now.

Weitere Informationen zum Microsoft Support-Dateien herunterladen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
119591So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei wird auf Servern mit verstärkter Sicherheit gespeichert, nicht autorisierte Änderungen an der Datei verhindert.

Methode 2

Deinstallieren Sie die ClickOnce-Anwendung, die Sie mit das abgelaufene Zertifikat signiert. Installieren Sie die aktualisierte ClickOnce-Anwendung, die das neue Zertifikat verwendet anschließend neu.

Methode 3

Erstellen einer Befehlszeilen-Assembly, die das Zertifikat aktualisiert. Gehen Sie hierzu folgendermaßen vor.

Microsoft bietet Programmierbeispiele für Abbildung nur ohne Gewährleistung oder konkludent. Dies umfasst, ist jedoch nicht beschränkt auf konkludenten Garantien der Handelsüblichkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel setzt voraus, dass Sie mit der Programmiersprache, die Programmierungsbeispiele ist und mit den Tools, die zum Erstellen und Debuggen von Prozeduren verwendet werden vertraut sind. Microsoft Support-Technikern helfen, Erläutern Sie die Funktionalität von einer bestimmten Prozedur. Jedoch können Sie nicht ändern diese Beispiele bieten Funktionen hinzugefügt oder Verfahren, um Ihren Anforderungen entsprechend zu erstellen.
  1. Klicken Sie in Visual Studio 2005 im Menü Datei auf neu , und klicken Sie dann auf Projekt .
  2. Klicken Sie auf Visual C++ , klicken Sie auf Win32-Konsolenanwendung , geben Sie RenewCert im Feld Name und klicken Sie dann auf OK .
  3. Klicken Sie im Dialogfeld Win32-Anwendungs-Assistenten auf Fertig stellen .
  4. In the RenewCert.cpp file, replace the existing code with the following code:
    #include "stdafx.h"
    
    void ReadPFXFile(LPCWSTR fileName, CRYPT_DATA_BLOB *pPFX)
    
    {
    
                HANDLE hCertFile = NULL;
    
                DWORD cbRead = 0;
    
                DWORD dwFileSize = 0, dwFileSizeHi = 0;
    
                hCertFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    
                dwFileSize = GetFileSize(hCertFile, &dwFileSizeHi);
    
                pPFX->pbData = (BYTE *) CryptMemAlloc(dwFileSize*sizeof(BYTE));
    
                pPFX->cbData = dwFileSize;
    
                ReadFile(hCertFile, pPFX->pbData, pPFX->cbData, &cbRead, NULL);
    
                CloseHandle(hCertFile);
    
    }
    
    void GetPrivateKey(CRYPT_DATA_BLOB pPFX, LPCWSTR szPassword, HCRYPTPROV *hCPContext)
    
    {
    
                HCERTSTORE hCertStore = NULL;
    
                PCCERT_CONTEXT hCertContext = NULL;
    
                DWORD dwKeySpec = AT_SIGNATURE;
    
                BOOL bFreeCertKey = TRUE;
    
                hCertStore = PFXImportCertStore(&pPFX, szPassword, CRYPT_EXPORTABLE);
    
                hCertContext = CertEnumCertificatesInStore(hCertStore, NULL);
    
                CryptAcquireCertificatePrivateKey(hCertContext, 0, NULL, hCPContext, &dwKeySpec, &bFreeCertKey);
    
                CertCloseStore(hCertStore, CERT_CLOSE_STORE_FORCE_FLAG);
    
    }
    
    void PrintContainerName(HCRYPTPROV hCPContext)
    
    {
    
                DWORD containerNameLen = 0;
    
                CHAR *szContainerName = NULL;
    
                CryptGetProvParam(hCPContext, PP_CONTAINER, NULL, &containerNameLen, 0);
    
                szContainerName = (CHAR *)CryptMemAlloc(sizeof(BYTE)*containerNameLen);
    
                CryptGetProvParam(hCPContext, PP_CONTAINER, (BYTE *)szContainerName, &containerNameLen, 0);
    
                printf("This certificate's container name is: %s", szContainerName);
    
    }
    
    void MakeNewCert(HCRYPTPROV hCPContext, LPCWSTR szCertName, LPCWSTR szPassword, CRYPT_DATA_BLOB *pPFX)
    
    {
    
                CERT_NAME_BLOB certNameBlob = {0,NULL};
    
                PCCERT_CONTEXT hCertContext = NULL;
    
                SYSTEMTIME certExpireDate;
    
                HCERTSTORE hTempStore = NULL;
    
                CertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szCertName, CERT_OID_NAME_STR, NULL, NULL, &certNameBlob.cbData, NULL);
    
                certNameBlob.pbData = (BYTE *)CryptMemAlloc(sizeof(BYTE)*certNameBlob.cbData);
    
                CertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szCertName, CERT_OID_NAME_STR, NULL, certNameBlob.pbData, &certNameBlob.cbData, NULL);
    
                GetSystemTime(&certExpireDate);
    
                certExpireDate.wYear += 5;
    
                hCertContext = CertCreateSelfSignCertificate(hCPContext, &certNameBlob, 0, NULL, NULL, NULL, &certExpireDate, NULL);
    
                hTempStore = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, CERT_STORE_CREATE_NEW_FLAG, 0);
    
                CertAddCertificateContextToStore(hTempStore, hCertContext, CERT_STORE_ADD_NEW, NULL);
    
                PFXExportCertStoreEx(hTempStore, pPFX, szPassword, NULL, EXPORT_PRIVATE_KEYS);
    
                pPFX->pbData = (BYTE *)CryptMemAlloc(sizeof(BYTE)*pPFX->cbData);
    
                PFXExportCertStoreEx(hTempStore, pPFX, szPassword, NULL, EXPORT_PRIVATE_KEYS);
    
                CryptMemFree(certNameBlob.pbData);
    
                CertCloseStore(hTempStore, CERT_CLOSE_STORE_FORCE_FLAG);
    
                CertFreeCertificateContext(hCertContext);
    
    }
    
    void WritePFX(CRYPT_DATA_BLOB pPFX, LPCWSTR szOutputFile)
    
    {
    
                HANDLE hOutputFile = NULL;
    
                DWORD cbWritten = 0;
    
                hOutputFile = CreateFile(szOutputFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
    
                WriteFile(hOutputFile, pPFX.pbData, pPFX.cbData, &cbWritten, NULL);
    
                CloseHandle(hOutputFile);
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
                LPCWSTR szCertFileName = NULL;
    
                CRYPT_DATA_BLOB pPFX;
    
                LPCWSTR szPassword = NULL;
    
                HCRYPTPROV hCPContext = NULL;
    
                LPCWSTR szCertName = L"CN=NewCert";
    
                CRYPT_DATA_BLOB pPfxOutputBlob = {0,NULL};
    
                LPCWSTR szOutFile = NULL;
    
                // Parse the command line.
    
                if(argc == 1)
    
                {
    
                            printf("renewcert <PFX File> <new cert filename> <new cert friendly name> [optional]<password>\n");
    
                            printf("Example: renewcert oldcert.pfx newcert.pfx \"CN=MyNewCert\" MySuperSecretPassword");
    
                            return 0;
    
                }
    
                if(argc >= 2)
    
                            szCertFileName = argv[1];
    
                if(argc >= 5)
    
                            szPassword = argv[4];
    
                // Uncomment this block to add <new cert filename> and <new cert friendly name> as parameters
    
                // NOTE: <new cert friendly name> must be of format "CN=<name>"
    
                if(argc >= 3)
    
                            szOutFile = argv[2];
    
                if(argc >= 4)
    
                            szCertName = argv[3];
    
                ReadPFXFile(szCertFileName, &pPFX);
    
                GetPrivateKey(pPFX, szPassword, &hCPContext);
    
                //PrintContainerName(hCPContext);
    
                // Uncomment this section to make a new PFX rather than just printing the container name.
    
                // Make sure you also uncomment the command line parameter section above.
    
                MakeNewCert(hCPContext, szCertName, szPassword, &pPfxOutputBlob);
    
                WritePFX(pPfxOutputBlob, szOutFile);
    
                // Clean up.
    
                CryptReleaseContext(hCPContext, 0);
    
                CryptMemFree(pPfxOutputBlob.pbData);
    
                CryptMemFree(pPFX.pbData);
    
                return 0;
    
    }
    
  5. Ersetzen Sie in der Datei stdafx.h den vorhandenen Code durch folgenden Code:
    // stdafx.h : include file for standard system include files,
    
    // or project specific include files that are used frequently, but
    
    // are changed infrequently.
    
    //
    
    #pragma once
    
    #define WIN32_LEAN_AND_MEAN                     // Exclude rarely used material from Windows headers.
    
    #include <stdio.h>
    
    #include <tchar.h>
    
    #include <windows.h>
    
    #include <wincrypt.h>
    
  6. Klicken Sie im Projekt auf Eigenschaften , um die Eigenschaftenseiten für dieses Projekt zu öffnen.
  7. Erweitern Sie den Knoten Linker , und klicken Sie dann auf Eingabe .
  8. Klicken Sie in das leere Fenster rechts neben Zusätzliche Abhängigkeiten , und klicken Sie dann mit den Auslassungspunkten (... ) um das Dialogfeld Zusätzliche Abhängigkeiten zu öffnen.
  9. Geben Sie in das leere Fenster Crypt32.lib und klicken Sie dann auf OK .
  10. Klicken Sie auf Übernehmen , und klicken Sie auf OK , um die Eigenschaftenseiten zu schließen.
  11. Klicken Sie im Menü Erstellen auf Projektmappe erstellen .
  12. Nachdem die Projektmappe erstellt wurde, den folgenden Befehl zum Aktualisieren des Zertifikats ausführen:
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Hinweis <OldCertificate> ist ein Platzhalter für das alte Zertifikat <NewCertificate> ist ein Platzhalter für das neue Zertifikat <NewCertificateName> ist ein Platzhalter für den Namen des neuen Zertifikats und <Password> ist ein Platzhalter für das Kennwort.

Weitere Informationen

Schritte zum Reproduzieren des Problems

  1. Starten Sie Visual Studio 2005.
  2. Auf die Datei , klicken Sie auf neu , und klicken Sie dann auf Projekt .
  3. Klicken Sie auf Visual c# , klicken Sie auf Windows-Anwendung , geben Sie WindowsApplication1 im Feld Name und klicken Sie dann auf OK .
  4. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf WindowsApplication1 und klicken Sie dann auf Eigenschaften .
  5. Klicken Sie auf Signatur , und weisen Sie ein Zertifikat, das bald abläuft.
  6. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf WindowsApplication1 und klicken Sie dann auf Veröffentlichen . Der Veröffentlichen-Assistent wird gestartet.
  7. Auf der , möchten Sie die Anwendung veröffentlichen? Seite, geben Sie einen gültigen URL, und klicken Sie dann auf Weiter . Verwenden Sie das folgende Format für den URL ein:
    http:// ServerName / FolderName
  8. Auf der wird die Anwendung offline verfügbar sein? klicken Sie auf die entsprechende Option.

    Notizen
    • Wenn Sie möchten, damit den Benutzer die Anwendung ausgeführt, wenn der Benutzer vom Netzwerk getrennt ist, klicken Sie auf Ja, diese Anwendung stehen online oder offline . Der Assistent erstellt eine Verknüpfung für die Anwendung im Startmenü .
    • Wenn die Anwendung direkt vom Veröffentlichungsort ausgeführt werden soll, klicken Sie auf Nein, diese Anwendung ist nur online verfügbar . Der Assistent erstellt eine Verknüpfung im Startmenü nicht.
  9. Klicken Sie auf Weiter , um den Vorgang fortzusetzen.
  10. Klicken Sie auf Fertig stellen , um die Anwendung zu veröffentlichen.
  11. Installieren Sie die ClickOnce-Anwendung von http:// ServerName / FolderName /publish.htm URL.
  12. Wiederholen Sie Schritte 6 bis 10, wenn die Anwendung erneut veröffentlichen möchten, nach Ablauf des Zertifikats.
  13. Versuchen Sie, die ClickOnce-Anwendungsaktualisierung von http:// ServerName installieren / FolderName /publish.htm URL.

Eigenschaften

Artikel-ID: 925521 - Geändert am: Donnerstag, 12. März 2009 - Version: 4.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Keywords: 
kbmt kbtshoot kberrmsg kbbug kbprb KB925521 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: 925521
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.

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