Yükleme imzalamakta kullanılan sertifikanın süresi dolduktan sonra bir Visual Studio 2005 ClickOnce uygulama güncelleştirmeye çalıştığınızda hata iletisi alıyorsunuz

Makale çevirileri Makale çevirileri
Makale numarası: 925521 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Yükleme imzalamakta kullanılan sertifikanın süresi dolduktan sonra bir Microsoft Visual Studio 2005 ClickOnce uygulama güncelleştirmeye çalıştığınızda, aşağıdaki hata iletisini alırsınız:
Dağıtım kimliğini, aboneliğin eşleşmiyor.

Neden

Dijital sertifika kullanarak, tüm ClickOnce dağıtımı imzalamak zorundadır çünkü bu sorun oluşur. Zaman aşımına uğramış bir sertifika, ClickOnce bir uygulamanın oturum açmak için kullanamazsınız. Sertifikanın kullanım süresi sona bir uygulama için bir güncelleştirme dağıtmak için <a0></a0>, yeni bir sertifika uygulama atamanız gerekir. Yeni bir sertifika, özgün sertifika eşleşmezse, "Belirtiler" bölümünde açıklanan hata iletisini alırsınız.

Çözüm

Bu sorunu gidermek için aşağıdaki yöntemlerden birini kullanın.

Yöntem 1

Microsoft ClickOnce uygulamanın yüklü olduğu istemci bilgisayarda güncelleştirme .NET Framework 2.0 Service Pack 1 (SP1) veya sonraki bir sürümü.

Windows Vista

.NET Framework 3.5 veya .NET Framework 3.5 SP 1'i uygulayın.

Not .NET Framework 2.0 üzerine artımlı olarak oluşturun birçok yeni özellik ve 3.0, .NET Framework 3.5 içerir. .NET Framework 3.5 için .NET Framework 2.0 SP1 ve .NET Framework 3.0 SP1'i içerir.

Aşağıdaki dosya Microsoft Yükleme Merkezi'nden yüklenebilir:

Bu resmi kapatBu resmi aç
Download
Download the .NET Framework 3.5 package now.

Bu resmi kapatBu resmi aç
Download
Download the .NET Framework 3.5 Service Pack 1 package now.

Microsoft Destek dosyalarını karşıdan yükleme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.

WINDOWS XP

.NET Framework 2.0 SP1'i veya .NET Framework 2.0 Service Pack 2 (SP2) için geçerlidir.

Aşağıdaki dosyalar Microsoft Yükleme Merkezi'nden yüklenebilir:

Bu resmi kapatBu resmi aç
Download
Download the .NET Framework 2.0 Service Pack 1 (x86) package now.

Bu resmi kapatBu resmi aç
Download
Download the .NET Framework 2.0 Service Pack 1 (x64) package now.

Bu resmi kapatBu resmi aç
Download
Download the .NET Framework 2.0 Service Pack 2 package now.

Microsoft Destek dosyalarını karşıdan yükleme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
119591Microsoft Destek Dosyaları Çevrimiçi Hizmetler'den Nasıl Alınır
Microsoft bu dosyada virüs taraması yapmıştır. Microsoft, dosyanın kullanıma sunulduğu tarihteki en güncel virüs tarama yazılımını kullanmıştır. Dosya, üzerinde herhangi bir yetkisiz değişiklik yapılmasını engellemeye yardım eden geliştirilmiş güvenliğe sahip sunucularda depolanır.

Yöntem 2

Zaman aşımına uğramış bir sertifika kullanılarak imzalanmış ClickOnce uygulamayı kaldırın. Daha sonra yeni sertifika kullanan güncelleştirilmiş ClickOnce uygulamayı yeniden yükleyin.

Yöntem 3

Sertifika güncelleştiren bir komut satırı derleme oluşturun. Bunu yapmak için şu adımları izleyin.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir. Ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.
  1. Visual Studio 2005 ' te Dosya menüsünde Yeni'yi tıklatın ve sonra Project ' i tıklatın.
  2. Visual C++ ' ı tıklatın, Win32 Console Application ' ı tıklatın, RenewCert <a2>ad</a2> kutusuna yazın ve Tamam ' ı tıklatın.
  3. Win32 uygulama Sihirbazı iletişim kutusunda son ' u tıklatın.
  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. Stdafx.h dosyanın varolan kodu aşağıdaki kodla değiştirin:
    // 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. Proje menüsünde bu proje için özellik sayfaları'nı açmak için Özellikler ' i tıklatın.
  7. Bağlayıcı düğümünü genişletin ve sonra Giriş ' i tıklatın.
  8. Ek bağımlılıklar sağındaki boş bir pencere içinde tıklatın ve sonra Ek bağımlılıklar iletişim kutusunu açmak için üç nokta düğmesini (...) tıklatın.
  9. Boş bir pencere Crypt32.lib yazın ve Tamam ' ı tıklatın.
  10. Uygula ' yı tıklatın ve sonra da özellik sayfaları'nı kapatmak için Tamam ' ı tıklatın.
  11. Yapı) menüsünde, Build Solution ' ı tıklatın.
  12. Çözüm sonra sertifikayı güncelleştirmek için aşağıdaki komutu çalıştırın:
    renewcert <OldCertificate>.pfx <NewCertificate>.pfx \"CN=<NewCertificateName>\" <Password>
    Not <OldCertificate> eski sertifika için bir yertutucudur <NewCertificate>, yeni sertifika için bir yertutucudur <NewCertificateName><Password> parola için bir yer tutucudur.

Daha fazla bilgi

Sorunu yeniden oluşturma adımları

  1. Visual Studio 2005'i başlatın.
  2. Dosya menüsünden Yeni ' yi tıklatın ve sonra Project ' i tıklatın.
  3. Visual C# ' ı tıklatın, Windows uygulama ' yı tıklatın, WindowsApplication1 <a2>ad</a2> kutusuna yazın ve Tamam ' ı tıklatın.
  4. Solution Explorer'da (Çözüm Gezgini), WindowsApplication1 ' ı sağ tıklatın ve sonra da Properties ' i tıklatın.
  5. Oturum açmak için tıklatın ve sonra da yakında sona erecek bir sertifika atayın.
  6. Solution Explorer'da (Çözüm Gezgini), WindowsApplication1 ' ı sağ tıklatın ve sonra da Yayımla ' yı tıklatın. Yayımla Sihirbazı'nı başlatır.
  7. Üzerinde WHERE uygulama yayımlamak istiyorsunuz? sayfa, geçerli bir URL yazın ve sonra ileri ' yi tıklatın. Aşağıdaki biçimde URL için kullanın:
    <a1>http://</a1> ServerName / FolderName
  8. Üzerinde başvuru çevrimdışı kullanılabilir duruma geçer? sayfasında, uygun seçeneği tıklatın.

    Notları
    • Kullanıcı ağ bağlantınız kesildiğinde, uygulamayı çalıştırın kullanıcıya izin vermek istiyorsanız, Evet, bu uygulama kullanılabilir çevrimiçi veya çevrimdışı'ı tıklatın. Sihirbaz, Başlat menüsünde uygulama için bir kısayol oluşturur.
    • Yayınlama konumundan uygulamayı çalıştırmak istiyorsanız, Hayır, bu uygulama kullanılabilir yalnızca çevrimiçi'ı tıklatın. Sihirbaz, Başlat menüsündeki bir kısayolu oluşturmaz.
  9. Devam etmek için ileri ' yi tıklatın.
  10. Uygulama yayımlamak için son ' u tıklatın.
  11. Http:// ServerName ClickOnce uygulama yükleme / FolderName /publish.htm URL.
  12. Sertifikanın sona erdikten sonra bu adımları 6 için uygulamayı yeniden yayımlamak için 10 yineleyin.
  13. Http:// ServerName ClickOnce uygulama güncelleştirmesini yüklemeye çalıştığınızda / FolderName /publish.htm URL.

Özellikler

Makale numarası: 925521 - Last Review: 12 Mart 2009 Perşembe - Gözden geçirme: 4.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express Edition
Anahtar Kelimeler: 
kbmt kbtshoot kberrmsg kbbug kbprb KB925521 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:925521

Geri Bildirim Ver

 

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