Vous recevez un message d'erreur lorsque vous essayez mettre à jour une application Visual Studio 2005 ClickOnce après expiration du certificat qui a été utilisé pour signer l'installation

Traductions disponibles Traductions disponibles
Numéro d'article: 925521 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque vous essayez de mettre à jour une application ClickOnce de Microsoft Visual Studio 2005 après l'expiration du certificat utilisé pour signer l'installation, vous recevez message d'erreur suivantes :
L'identité de déploiement ne correspond pas à l'abonnement.

Cause

Ce problème se produit car vous devez vous connecter tous les déploiements ClickOnce en utilisant un certificat numérique. Vous ne pouvez pas utiliser un certificat a expiré pour signer une application ClickOnce. Pour déployer une mise à jour vers une application qui a un certificat a expiré, vous devez affecter un nouveau certificat de l'application. Lorsque le nouveau certificat ne correspond pas le certificat original, vous recevez message d'erreur mentionné dans la section «Symptômes».

Résolution

Pour résoudre ce problème, appliquez l'une des méthodes suivantes.

Méthode 1

Mettre à jour l'ordinateur client où l'application ClickOnce est installée pour Microsoft .NET Framework 2.0 Service Pack 1 (SP1) ou une version ultérieure.

Windows Vista

Appliquer le .NET Framework 3.5 ou le .NET Framework 3.5 SP1.

Remarque .NET Framework 3.5 contient de nombreuses nouvelles fonctionnalités qui génération incrémentielle sur le .NET Framework 2.0 et 3.0. .NET Framework 3.5 inclut .NET Framework 2.0 SP1 et .NET Framework 3.0 SP1.

Le fichier suivant est disponible pour téléchargement à partir du Centre de téléchargement Microsoft :

Réduire cette imageAgrandir cette image
Download
Download the .NET Framework 3.5 package now.

Réduire cette imageAgrandir cette image
Download
Download the .NET Framework 3.5 Service Pack 1 package now.

Pour plus d'informations sur le téléchargement des fichiers de prise en charge Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
119591Comment obtenir les fichiers de prise en charge de Microsoft à partir de services en ligne
Microsoft a analysé ce fichier pour les virus. Microsoft utilisé les logiciels détection de virus les plus récentes ne sont disponible à la date du fichier a été validé. Le fichier est stocké sur des serveurs la sécurité renforcée d'empêcher toute modification non autorisée dans le fichier.

Windows XP

Appliquer le .NET Framework 2.0 SP1 ou .NET Framework 2.0 Service Pack 2 (SP2).

Les fichiers suivants sont disponibles pour téléchargement à partir du Centre de téléchargement Microsoft :

Réduire cette imageAgrandir cette image
Download
Download the .NET Framework 2.0 Service Pack 1 (x86) package now.

Réduire cette imageAgrandir cette image
Download
Download the .NET Framework 2.0 Service Pack 1 (x64) package now.

Réduire cette imageAgrandir cette image
Download
Download the .NET Framework 2.0 Service Pack 2 package now.

Pour plus d'informations sur le téléchargement des fichiers de prise en charge Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
119591Comment obtenir les fichiers de prise en charge de Microsoft à partir de services en ligne
Microsoft a analysé ce fichier pour les virus. Microsoft utilisé les logiciels détection de virus les plus récentes ne sont disponible à la date du fichier a été validé. Le fichier est stocké sur des serveurs la sécurité renforcée d'empêcher toute modification non autorisée dans le fichier.

Méthode 2

Désinstallez l'application ClickOnce signés à l'aide du certificat a expiré. Ensuite, réinstallez l'application ClickOnce mis à jour qui utilise le nouveau certificat.

Méthode 3

Créer un assembly de la ligne de commande qui met à jour le certificat. Pour ce faire, procédez comme suit.

Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie expresse ou implicite. Cela inclut, mais n'est pas limité à, toute garantie implicite de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils qui sont utilisés pour créer et déboguer des procédures. Ingénieurs du support Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière. Toutefois, ils ne modifieront pas ces exemples afin de fournir des fonctionnalités supplémentaires ou des procédures répondant à vos besoins spécifiques de construction.
  1. Dans Visual Studio 2005, cliquez sur Nouveau dans le menu fichier , puis cliquez sur projet .
  2. Cliquez sur Visual C++ , cliquez sur Application Console Win32 , tapez RenewCert dans la zone nom et puis cliquez sur OK .
  3. Dans la boîte de dialogue Assistant Application Win32 , cliquez sur Terminer .
  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. Dans le fichier stdafx.h, remplacez le code existant par le code suivant :
    // 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. Dans le menu projet , cliquez sur Propriétés pour ouvrir les pages de propriétés pour ce projet.
  7. Développez le n?ud Éditeur de liens , puis cliquez sur entrée .
  8. Cliquez dans la fenêtre vide à droite de Dépendances supplémentaires , puis cliquez sur le bouton de sélection (... ) pour ouvrir la boîte de dialogue Dépendances supplémentaires .
  9. Dans la fenêtre vide, tapez vous et puis cliquez sur OK .
  10. Cliquez sur Appliquer , puis cliquez sur OK pour fermer les pages de propriétés.
  11. Dans le menu Générer , cliquez sur Générer la solution .
  12. Une fois la solution est créée, exécutez la commande suivante pour mettre à jour le certificat :
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Remarque <OldCertificate> est un espace réservé pour l'ancien certificat <NewCertificate> est un espace réservé pour le nouveau certificat, <NewCertificateName> est un espace réservé pour le nom du nouveau certificat et <Password> est un espace réservé pour le mot de passe.

Plus d'informations

Procédure pour reproduire ce problème

  1. Démarrez Visual Studio 2005.
  2. Dans le fichier menu, cliquez sur Nouveau , puis sur projet .
  3. Cliquez sur Visual c# , cliquez sur Application Windows , tapez WindowsApplication1 dans la zone nom et puis cliquez sur OK .
  4. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur WindowsApplication1 , puis cliquez sur Propriétés .
  5. Cliquez sur signature , puis affectez un certificat qui expire sous peu.
  6. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur WindowsApplication1 , puis cliquez sur Publier . L'Assistant publication démarre.
  7. Sur la où voulez-vous publier l'application? page, tapez une URL valide et cliquez sur Suivant . Utilisez le format suivant pour l'URL :
    http:// ServerName / FolderName
  8. Sur la l'application sera-t-elle disponible hors connexion? page, cliquez sur l'option appropriée.

    Notes
    • Si vous souhaitez que l'utilisateur d'exécuter l'application lorsque l'utilisateur est déconnecté du réseau, cliquez sur Oui, cette application sera disponible en ligne ou hors connexion . L'Assistant crée un raccourci pour l'application dans le menu Démarrer .
    • Si vous souhaitez exécuter l'application directement à partir de l'emplacement de publication, cliquez sur non, cette application est uniquement disponible en ligne . L'Assistant ne crée pas un raccourci dans le menu Démarrer .
  9. Cliquez sur Suivant pour continuer.
  10. Cliquez sur Terminer pour publier l'application.
  11. Installer l'application ClickOnce à partir de http:// ServerName / FolderName /publish.htm URL.
  12. Après l'expiration du certificat, répétez les étapes 6 à 10 pour republier l'application.
  13. Essayez d'installer la mise à jour ClickOnce application à partir de http:// ServerName / FolderName /publish.htm URL.

Propriétés

Numéro d'article: 925521 - Dernière mise à jour: jeudi 12 mars 2009 - Version: 4.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Mots-clés : 
kbmt kbtshoot kberrmsg kbbug kbprb KB925521 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 925521
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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