Makale numarası: 201318 - Son Gözden Geçirme: 28 Nisan 2005 Perşembe - Gözden geçirme: 3.0

Uzun bir adla bir ATL sunucu kaydolduğunuzda bir "Sistem belirtilen dosyayı bulamıyor" hata iletisi alıyorsunuz

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

Uzun yol adıyla bir dizinde bulunan olan uzun bir dosya adı veya tek bir ATL sunucu kaydediliyor, bir 0x80070002 işlevi hata:
Sistem belirtilen dosyayı bulamıyor.
Bu hata, DLL dosyaları için Regsvr32.exe tarafından döndürülür. EXE'ler için _tWinMain() çağrısında Module::RegisterServer (CComModule::RegisterServer) için bu hatayı döndürür.

Neden

ATL'ın kayıt kodu GetShortPathName() dosyanın kısa adını almak için kullanılır ve kısa bir ad kaydı için kullanır. Dosyaya bir kısa dosya adı yoksa, GetShortPathName() başarısız olur. Windows NT, Windows 95 ve Windows 98'de varsayılan davranışı otomatik kısa dosya adları (8.3 biçimi) dosyaları için uzun adlarla oluşturmaktır. "Sistem ilke düzenleyicisini" (Poledit.exe) kullanarak bu seçeneği kapatabilirsiniz. Bazı dosya sistemleri, varsayılan olarak da kısa adları oluşturulmasını desteklemez. ATL çağrıda LoadLibraryEx() GetShortPathName() tarafından döndürülen geçersiz dosya adı olarak kullanmaya çalışır ve 0x80070002 ile başarısız oluyor.

Çözüm

ATL kaynağında GetShortPathName() çağrıldığında başarılı olup olmadığını denetlemek için kodu ekleyin. Aşağıdaki işlevler değiştirilmesi gerekir:
  • CComModule::UpdateRegistryFromResourceS(UINT...) - <a1>Satır</a1> 4933 ATLBASE.H.
  • CComModule::UpdateRegistryFromResourceS(LPCTSTR...) - <a1>Satır</a1> 4965 ATLBASE.H.
  • AtlModuleUpdateRegistryFromResourceD() - ATLBASE.H, 5896 satırı.
Aşağıdaki satırlardan değiştirin:
// Convert to short path to work around bug in Windows NT 4.0's CreateProcess.
TCHAR szModuleShort[_MAX_PATH];
GetShortPathName(szModule, szModuleShort, _MAX_PATH);
LPOLESTR pszModule = T2OLE(szModuleShort);
				
aşağıdaki:
// Convert to short path to work around bug in Windows NT 4.0's CreateProcess.
TCHAR szModuleShort[_MAX_PATH];
int cbShortName = GetShortPathName(szModule, szModuleShort, _MAX_PATH);
LPOLESTR pszModule;
if (cbShortName == _MAX_PATH)
    return E_OUTOFMEMORY;
pszModule = (cbShortName == 0||cbShortName == ERROR_INVALID_PARAMETER) \  ? T2OLE(szModule) : T2OLE(szModuleShort);
				
CComModule::RegisterClassHelper (ATLBASE.H, <a1>Satır</a1> 5044) ' aşağıdaki satırlardan değiştirme:
// Convert to short path to work around bug in Windows NT 4.0's CreateProcess.
TCHAR szModuleShort[_MAX_PATH];
GetShortPathName(szModule, szModuleShort, _MAX_PATH);
key.SetKeyValue(szLS32, szModuleShort);
				
aşağıdaki:
// Convert to short path to work around bug in Windows NT 4.0's CreateProcess.
TCHAR szModuleShort[_MAX_PATH];
int cbShortName = GetShortPathName(szModule, szModuleShort, _MAX_PATH);
if (cbShortName == _MAX_PATH)
    return E_OUTOFMEMORY;
if (cbShortName == 0 || cbShortName == ERROR_INVALID_PARAMETER)
    key.SetKeyValue(szLS32, szModule);
else
    key.SetKeyValue(szLS32, szModuleShort);
				
ReleaseMinSize için oluşturduğunuz ATL.dll kodu yerine kullanıldığından, bu değişiklikler sonuç vardır.

Durum

Microsoft, Microsoft bir hata olduğunu onaylamıştır bu makalenin başında listelenen ürünlerden. Bu hata, Visual Studio 6.0 Service Pack 3'te giderilmiştir.
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
194295  (http://support.microsoft.com/kb/194295/ ) Nasıl YAPıLıR: Haber ver kısımlarına Visual Studio 6.0 hizmet paketleri yüklü
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
194022  (http://support.microsoft.com/kb/194022/ ) BILGI: Visual Studio 6.0 hizmet paketleri, ne, nerede, neden

Daha fazla bilgi

ATL sunucu Windows NT'NIN CreateProcess() işlevindeki bir hatayı gidermek için kısa dosya adı kullanarak kaydeder.

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
179690  (http://support.microsoft.com/kb/179690/ ) Düzeltme: COM sunucusu ile uzun dosya adı geri 0x80080005 başlatılıyor
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
173673  (http://support.microsoft.com/kb/173673/ ) Windows NT Workstation 4.0 için Windows NT Server Tools Kullanıma Hazır

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
179690  (http://support.microsoft.com/kb/179690/ ) Hata: TCProps.dll Kur'da kaydetmek başarısız.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ActiveX Template Library 3.0, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Anahtar Kelimeler: 
kbmt kbbug kbfaq kbfix kbregistry kbvs600sp3fix KB201318 KbMttr
Otomatik TercümeOtomatik Tercüme
Ö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:201318  (http://support.microsoft.com/kb/201318/en-us/ )