Messaggio di errore quando si tenta di aggiornare un'applicazione ClickOnce di Visual Studio 2005 dopo la scadenza del certificato Ŕ stato utilizzato per firmare l'installazione

Traduzione articoli Traduzione articoli
Identificativo articolo: 925521 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si tenta di aggiornare un'applicazione ClickOnce di Microsoft Visual Studio 2005 dopo la scadenza del certificato utilizzato per firmare l'installazione, viene visualizzato il seguente messaggio di errore:
L'identitÓ di distribuzione non corrisponde la sottoscrizione.

Cause

Questo problema si verifica perchÚ Ŕ necessario firmare tutte le distribuzioni ClickOnce utilizzando un certificato digitale. Non Ŕ possibile utilizzare un certificato scaduto per firmare un'applicazione ClickOnce. Per distribuire un aggiornamento a un'applicazione che dispone di un certificato scaduto, Ŕ necessario assegnare l'applicazione di un nuovo certificato. Quando il nuovo certificato non corrisponde del certificato originale, Ŕ visualizzato il messaggio di errore menzionato nella sezione "Sintomi".

Risoluzione

Per risolvere il problema, utilizzare uno dei seguenti metodi.

Metodo 1

Aggiornamento di computer client in cui Ŕ installato l'applicazione ClickOnce di Microsoft .NET Framework 2.0 Service Pack 1 (SP1) o versione successiva.

Windows Vista

Applicare di .NET Framework 3.5 o .NET Framework 3.5 SP 1.

Nota .NET Framework 3.5 contiene numerose nuove funzionalitÓ di generazione incrementale su .NET Framework 2.0 e 3.0. .NET Framework 3.5 include .NET Framework 2.0 SP1 e .NET Framework 3.0 SP1.

Il seguente file Ŕ disponibile per il download dall'Area download Microsoft:

Riduci l'immagineEspandi l'immagine
Download
Download the .NET Framework 3.5 package now.

Riduci l'immagineEspandi l'immagine
Download
Download the .NET Framework 3.5 Service Pack 1 package now.

Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi in linea
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata, che impedisce modifiche non autorizzate.

Windows XP

Applicare .NET Framework 2.0 SP1 o .NET Framework 2.0 Service Pack 2 (SP2).

Sono disponibili i file seguenti dall'Area download Microsoft:

Riduci l'immagineEspandi l'immagine
Download
Download the .NET Framework 2.0 Service Pack 1 (x86) package now.

Riduci l'immagineEspandi l'immagine
Download
Download the .NET Framework 2.0 Service Pack 1 (x64) package now.

Riduci l'immagineEspandi l'immagine
Download
Download the .NET Framework 2.0 Service Pack 2 package now.

Per ulteriori informazioni su come scaricare file di supporto Microsoft, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
119591Come ottenere file di supporto Microsoft dai servizi in linea
Microsoft analizzati questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus pi¨ recente disponibile alla data di pubblicazione del file. Il file Ŕ archiviato in server con protezione avanzata, che impedisce modifiche non autorizzate.

Metodo 2

Disinstallare l'applicazione ClickOnce firmato utilizzando il certificato scaduto. Quindi reinstallare l'applicazione ClickOnce aggiornata che utilizza il nuovo certificato.

Metodo 3

Creare un assembly della riga di comando che aggiorna il certificato. Per effettuare questa operazione, attenersi alla seguente procedura.

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Questo include, ma non Ŕ limitato a, le garanzie implicite di commerciabilitÓ o idoneitÓ per uno scopo specifico. Questo articolo si presuppone che conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug di procedure. Tecnici del supporto Microsoft possono spiegare la funzionalitÓ di una particolare procedura. Tuttavia, non modificherÓ questi esempi per fornire funzionalitÓ aggiuntive o creare procedure per soddisfare specifiche esigenze.
  1. In Visual Studio 2005, fare clic su Nuovo dal menu file e quindi fare clic su progetto .
  2. Fare clic su Visual c ++ , fare clic su Applicazione Console Win32 , digitare RenewCert nella casella nome e quindi fare clic su OK .
  3. Nella finestra della finestra di dialogo Creazione guidata applicazione Win32 , fare clic su Fine .
  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. Nel file stdafx.h, sostituire il codice esistente con il codice riportato di seguito:
    // 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. Dal menu progetto , Ŕ necessario scegliere ProprietÓ per aprire le pagine delle proprietÓ per questo progetto.
  7. Espandere il nodo linker e quindi fare clic su input .
  8. Fare clic su nella finestra vuota a destra di Dipendenze aggiuntive e quindi sul pulsante con i puntini di sospensione (... ) per aprire la finestra di dialogo Dipendenze aggiuntive .
  9. Nella finestra vuota digitare Crypt32.lib e quindi fare clic su OK .
  10. Fare clic su Applica e quindi fare clic su OK per chiudere le pagine delle proprietÓ.
  11. Dal menu Genera scegliere Genera soluzione .
  12. Dopo che la soluzione Ŕ stata generata, eseguire il comando seguente per aggiornare il certificato:
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Nota <OldCertificate> Ŕ un segnaposto per il vecchio certificato <NewCertificate> Ŕ un segnaposto per il nuovo certificato <NewCertificateName> Ŕ un segnaposto per il nome del nuovo certificato e <Password> Ŕ un segnaposto per la password.

Informazioni

Procedura per riprodurre il problema

  1. Avviare Visual Studio 2005.
  2. Dal menu file scegliere Nuovo dal menu e quindi fare clic su progetto .
  3. Fare clic su C# , fare clic su Applicazione Windows , digitare WindowsApplication1 nella casella nome e quindi fare clic su OK .
  4. In Esplora soluzioni, fare clic con il pulsante destro del mouse su WindowsApplication1 e scegliere ProprietÓ .
  5. Fare clic su firma e quindi assegnare un certificato che scade entro breve tempo.
  6. In Esplora soluzioni, fare clic con il pulsante destro del mouse su WindowsApplication1 e quindi fare clic su pubblica . Avviata la procedura guidata pubblica.
  7. Nel dove si desidera pubblicare l'applicazione? pagina, digita un URL valido e quindi fare clic su Avanti . Utilizzare il seguente formato per l'URL:
    http:// ServerName / FolderName
  8. Nel l'applicazione sarÓ disponibile in modalitÓ non in linea? pagina, scegliere l'opzione appropriata.

    note
    • Fare clic se si desidera consentire all'utente di eseguire l'applicazione quando l'utente Ŕ disconnesso dalla rete, su Sý, l'applicazione saranno disponibile in linea o non in linea . La procedura guidata crea un collegamento per l'applicazione dal menu di avvio .
    • Se si desidera che eseguire l'applicazione direttamente dal percorso di pubblicazione, fare clic su No, questa applicazione Ŕ disponibile solo in linea . La procedura guidata non crea un collegamento dal menu di avvio .
  9. Fare clic su Avanti per continuare.
  10. Fare clic su Fine per pubblicare l'applicazione.
  11. Installare l'applicazione di ClickOnce da http:// ServerName / FolderName /publish.htm URL.
  12. Alla scadenza del certificato, ripetere i passaggi 6 a 10 per pubblicare di nuovo l'applicazione.
  13. Provare a installare l'aggiornamento dell'applicazione ClickOnce da http:// ServerName / FolderName /publish.htm URL.

ProprietÓ

Identificativo articolo: 925521 - Ultima modifica: giovedý 12 marzo 2009 - Revisione: 4.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Chiavi:á
kbmt kbtshoot kberrmsg kbbug kbprb KB925521 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 925521
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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