ID Artikel: 201318 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0

Anda menerima pesan galat "sistem tidak dapat menemukan berkas yang dicari" ketika Anda mendaftar ATL server dengan nama panjang

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Perbesar semua | Perkecil semua

GEJALA

Mendaftar ATL server yang memiliki nama file yang panjang atau salah satu yang berada dalam direktori dengan nama jalan panjang, kembali kesalahan 0x80070002:
Sistem tidak dapat menemukan file ditentukan.
Untuk dll, kesalahan ini kembali oleh Regsvr32.exe. Untuk Mengkoleksi, panggilan untuk Module::RegisterServer (CComModule::RegisterServer) di _tWinMain() kembali kesalahan ini.

PENYEBAB

ATL's pendaftaran kode menggunakan GetShortPathName() untuk mengambil nama pendek file dan menggunakan nama pendek untuk pendaftaran. GetShortPathName() gagal jika file tidak memiliki nama file pendek. The perilaku default dalam Windows NT, Windows 95 dan Windows 98 akan secara otomatis Buat nama file pendek (8.3 format) untuk file dengan nama-nama yang panjang. Anda dapat mengubah opsi ini dari dengan menggunakan "Sistem kebijakan Editor" (Poledit.exe). File tertentu sistem juga tidak mendukung penciptaan nama pendek secara default. ATL mencoba untuk menggunakan nama file tidak sah kembali oleh GetShortPathName() dalam panggilan untuk LoadLibraryEx(), dan gagal dengan 0x80070002.

PEMECAHAN MASALAH

Ketika GetShortPathName() disebut dalam sumber ATL, menambahkan kode untuk memeriksa apakah itu berhasil. Fungsi-fungsi berikut harus diubah:
  • CComModule::UpdateRegistryFromResourceS(UINT...)- ATLBASE.H, baris 4933.
  • CComModule::UpdateRegistryFromResourceS(LPCTSTR...)- ATLBASE.H, baris 4965.
  • AtlModuleUpdateRegistryFromResourceD() - ATLBASE.H, line 5896.
Mengubah baris berikut dari:
// 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);
				
dengan berikut:
// 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);
				
Dalam CComModule::RegisterClassHelper (ATLBASE.H, baris 5044), mengubah baris dari berikut:
// 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);
				
dengan berikut:
// 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);
				
Perubahan ini memiliki hasil yang tidak ada jika Anda membangun untuk ReleaseMinSize, karena kode di ATL.dll digunakan sebagai gantinya.

STATUS

Microsoft telah mengkonfirmasi bahwa ini adalah bug di Microsoft produk yang didaftar pada awal artikel ini. Ini bug dikoreksi pada Visual Studio 6.0 paket layanan 3.
Untuk informasi lebih lanjut, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
194295  (http://support.microsoft.com/kb/194295/ ) HOWTO: Memberitahu bahwa Visual Studio 6.0 Service Paket yang diinstal
Untuk informasi lebih lanjut, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
194022  (http://support.microsoft.com/kb/194022/ ) INFO: Visual Studio 6.0 Service Pack, apa, di mana, mengapa

INFORMASI LEBIH LANJUT

ATL register server menggunakan nama file pendek untuk bekerja sekitar bug dalam Windows NT CreateProcess() fungsi.

Untuk informasi lebih lanjut, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
179690  (http://support.microsoft.com/kb/179690/ ) FIX: Meluncurkan COM Server dengan panjang kembali nama File 0x80080005
Untuk informasi lebih lanjut, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
173673  (http://support.microsoft.com/kb/173673/ ) Windows NT Server alat untuk Windows NT Workstation 4.0 tersedia

REFERENSI

Untuk lebih informasi, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
179690  (http://support.microsoft.com/kb/179690/ ) BUG: TCProps.dll gagal untuk mendaftarkan selama Setup

Berlaku bagi:
  • Microsoft ActiveX Template Library 3.0
Kata kunci: 
kbbug kbFAQ kbfix kbregistry kbvs600sp3fix kbmt KB201318 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:201318  (http://support.microsoft.com/kb/201318/en-us/ )