Při pokusu o aktualizaci aplikace Visual Studio 2005 ClickOnce po vypršení platnosti certifikátu, který byl použit k podepsání instalace se zobrazí chybová zpráva

Překlady článku Překlady článku
ID článku: 925521 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při pokusu o aktualizaci aplikace Microsoft Visual Studio 2005 ClickOnce po vypršení platnosti certifikátu použit k podpisu instalace zobrazí následující chybová zpráva:
Identita nasazení neodpovídá odběr.

Příčina

K tomuto problému dochází, protože všechna ClickOnce nasazení musí podepsat pomocí digitálního certifikátu. Prošlé certifikát nelze použít k podepsání aplikace ClickOnce. Chcete-li zavést aktualizaci aplikace, která má ukončenou platností certifikát, musíte přiřadit nový certifikát aplikace. Nový certifikát se neshoduje s původní certifikát, obdržíte chybovou zprávu, která je uvedena v "příznaky".

Řešení

Chcete-li tento problém vyřešit, použijte jednu z následujících metod.

Metoda 1

Aktualizovat klientský počítač nainstalovanou aplikaci ClickOnce Microsoft .NET Framework 2.0 Service Pack 1 (SP1) nebo vyšší verze.

Windows Vista

Použít .NET Framework 3.5 nebo .NET Framework 3.5 SP 1.

Poznámka: .NET Framework 3.5 obsahuje mnoho nových funkcí sestavení postupně po .NET Framework 2.0 a 3.0. .NET Framework 3.5 zahrnuje .NET Framework 2.0 SP1 a .NET Framework 3.0 SP1.

Na webu služby Stažení softwaru je k dispozici ke stažení následující soubor:

Zmenšit tento obrázekZvětšit tento obrázek
Download
Download the .NET Framework 3.5 package now.

Zmenšit tento obrázekZvětšit tento obrázek
Download
Download the .NET Framework 3.5 Service Pack 1 package now.

Další informace o stažení souborů podpory společnosti Microsoft v následujícím článku databáze Microsoft Knowledge Base:
119591Jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft tento soubor zkontroloval na výskyt virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici v den uveřejnění tohoto článku. Soubor je uložený na zabezpečených serverech neumožňujících neoprávněné změny souborů.

na systém Windows XP

Použít .NET Framework 2.0 SP1 nebo .NET Framework 2.0 Service Pack 2 (SP2).

K dispozici jsou Vám následující soubory ze sekce Ke Stažení:

Zmenšit tento obrázekZvětšit tento obrázek
Download
Download the .NET Framework 2.0 Service Pack 1 (x86) package now.

Zmenšit tento obrázekZvětšit tento obrázek
Download
Download the .NET Framework 2.0 Service Pack 1 (x64) package now.

Zmenšit tento obrázekZvětšit tento obrázek
Download
Download the .NET Framework 2.0 Service Pack 2 package now.

Další informace o stažení souborů podpory společnosti Microsoft v následujícím článku databáze Microsoft Knowledge Base:
119591Jak získat soubory podpory společnosti Microsoft ze serverů služeb online
Microsoft tento soubor zkontroloval na výskyt virů. Společnost Microsoft použila aktuální antivirový software, který byl k dispozici v den uveřejnění tohoto článku. Soubor je uložený na zabezpečených serverech neumožňujících neoprávněné změny souborů.

Metoda 2

Odinstalovat aplikace ClickOnce podepsané pomocí certifikátu platností. Potom znovu nainstalujte aktualizované ClickOnce aplikace používající nový certifikát.

Metoda 3

Vytvoření příkazového řádku sestavení, která aktualizuje certifikát. Postupujte takto.

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené,. včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určité procedury,. nemohou však následující příklady rozšířit o další funkce nebo vytvářet procedury podle konkrétních požadavků uživatele.
  1. V aplikaci Visual Studio 2005 klepněte v nabídce soubor na příkaz Nový a klepněte na příkaz projekt.
  2. Visual C++ klepněte klepněte Aplikace konzoly Win32, zadejte v poli názevRenewCert a klepněte na tlačítko OK.
  3. V dialogovém okně Průvodce aplikací Win32 klepněte na tlačítko Dokončit.
  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. V souboru stdafx.h nahraďte existující kód následující kód:
    // 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. V nabídce projekt klepněte na tlačítko Vlastnosti stránky vlastností pro tento projekt otevřít.
  7. Rozbalte uzel Linker a potom klepněte na tlačítko vstup.
  8. Klepněte v okně vpravo Další závislosti prázdné a klepněte na tlačítko se třemi tečkami (...) otevřete dialogové okno Další závislosti.
  9. V okně prázdné zadejte Crypt32.lib a potom klepněte na tlačítko OK.
  10. Klepněte na tlačítko použít a potom klepněte na tlačítko OK zavřete stránky vlastností.
  11. V nabídce vytvořit klepněte na tlačítko Sestavit řešení.
  12. Spustit následující příkaz Aktualizovat certifikát po integrovaných řešení:
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Poznámka <OldCertificate> je zástupný symbol pro starý certifikát <NewCertificate> je zástupný symbol pro nový certifikát <NewCertificateName> je zástupný název nového certifikátu a <Password> je zástupný symbol pro heslo.

Další informace

Kroky pro reprodukci problému

  1. Spusťte aplikaci Visual Studio 2005.
  2. Na soubor nabídce klepněte na příkaz Nový a klepněte na příkaz projekt.
  3. Klepněte na položku Visual C#, klepněte na tlačítko Aplikace Windows, v poli název zadejte WindowsApplication1 a klepněte na tlačítko OK.
  4. V aplikaci Solution Explorer klepněte pravým tlačítkem myši WindowsApplication1 a potom klepněte na příkaz Vlastnosti.
  5. Klepněte na podpis a přiřaďte certifikátu brzy vyprší.
  6. V aplikaci Solution Explorer klepněte pravým tlačítkem myši WindowsApplication1 a potom klepněte na tlačítko publikovat. Spustí se Průvodce publikovat.
  7. Na kde chcete publikovat aplikace? stránky zadejte platnou adresu URL a potom klepněte na tlačítko Další. Pro adresu, použijte následující formát:
    http:// ServerName / FolderName
  8. Na bude aplikace k dispozici offline? stránky, klepněte na příslušnou možnost.

    Poznámky
    • Pokud chcete nechat uživatele spustit aplikace, když je uživatel odpojen od sítě, klepněte na tlačítko Ano, tato aplikace bude k dispozici online nebo offline. Průvodce vytvoří zástupce aplikace v nabídce Start.
    • Pokud chcete aplikaci spustit přímo z umístění publikace, klepněte na tlačítko Ne, tato aplikace je k dispozici pouze online. Průvodce nevytvoří zástupce v nabídce Start.
  9. Pokračujte klepnutím na tlačítko Další.
  10. Klepněte na tlačítko Dokončit publikovat aplikace.
  11. Nainstalovat aplikaci ClickOnce z http:// ServerName / FolderName /publish.htm URL.
  12. Po vypršení platnosti certifikátu, opakujte kroky 6 až 10 znovu publikovat aplikace.
  13. Zkuste nainstalovat aktualizaci aplikace ClickOnce z http:// ServerName / FolderName /publish.htm URL.

Vlastnosti

ID článku: 925521 - Poslední aktualizace: 12. března 2009 - Revize: 4.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Klíčová slova: 
kbmt kbtshoot kberrmsg kbbug kbprb KB925521 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:925521

Dejte nám zpětnou vazbu

 

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