Recibe un mensaje de error "el sistema no puede encontrar el archivo especificado" al registrar un servidor ATL con un nombre largo

Seleccione idioma Seleccione idioma
Id. de artículo: 201318 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Registrar un servidor ATL que tiene un nombre de archivo largos o uno que reside en un directorio con un nombre de ruta de acceso larga, devuelve un 0 x 80070002 error:
El sistema no puede encontrar el archivo especificado.
Para archivos DLL, Regsvr32.exe devuelve este error. Para archivos exe, la llamada a Module::RegisterServer (CComModule::RegisterServer) en _tWinMain() devuelve este error.

Causa

Código de registro de ATL, utiliza GetShortPathName() para recuperar el nombre corto del archivo y utiliza el nombre corto para el registro. GetShortPathName() falla si el archivo no tiene un nombre de archivo corto. El comportamiento predeterminado en Windows NT, Windows 95 y Windows 98 es crear automáticamente nombres de archivo corto (formato 8.3) de archivos con nombres largos. Puede desactivar esta opción mediante la "directiva de Editor del sistema" (Poledit.exe). Ciertos sistemas de archivo no admiten la creación de nombres cortos de forma predeterminada. ATL intenta utilizar el nombre de archivo no válido devuelto por GetShortPathName() en una llamada a LoadLibraryEx() y se produce un error con 0 x 80070002.

Solución

Cuando se llama a GetShortPathName() en el origen ATL, agregar código para comprobar o no correctamente. Se deben modificar las siguientes funciones:
  • CComModule::UpdateRegistryFromResourceS(UINT...) - ATLBASE.H, línea 4933.
  • CComModule::UpdateRegistryFromResourceS(LPCTSTR...) - ATLBASE.H, línea 4965.
  • AtlModuleUpdateRegistryFromResourceD() - atlbase.H, línea 5896.
Cambie las líneas siguientes de:
// 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);
				
al siguiente:
// 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);
				
en CComModule::RegisterClassHelper (atlbase.H, línea 5044), cambie las líneas siguientes de:
// 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);
				
al siguiente:
// 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);
				
estos cambios no tienen ningún resultado si se genera para ReleaseMinSize, porque se utiliza en su lugar el código en ATL.dll.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este error se corrigió en Visual Studio 6.0 Service Pack 3.
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
194295Cómo: Saber que servicio de Visual Studio 6.0 Pack instalados
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
194022Studio 6.0 Service Pack de información: Visual qué son, dónde están y por qué

Más información

ATL registra servidores mediante el nombre de archivo corto para evitar un error en función de Windows NT CreateProcess().

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
179690REVISIÓN: Iniciar el servidor de COM con devoluciones de nombre largo de archivo 0 x 80080005
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
173673Herramientas de servidor de Windows NT para Windows NT Workstation 4.0 disponibles

Referencias

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
179690Error: Error de TCProps.dll registrar durante la instalación

Propiedades

Id. de artículo: 201318 - Última revisión: jueves, 28 de abril de 2005 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft ActiveX Template Library 3.0 sobre las siguientes plataformas
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palabras clave: 
kbmt kbbug kbfaq kbfix kbregistry kbvs600sp3fix KB201318 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 201318

Enviar comentarios

 

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