2008-12-05 43 views

Respuesta

12

Es posible que también desee probar configurar Reg-Free COM para su proyecto.Hay un freeware llamado Make My Manifest que hará la mayor parte del trabajo para usted

EDIT El sitio web de MMM está caído. Veo here que el autor estaba teniendo problemas con su alojamiento y proporcionó otra ubicación para obtener Make My Manifest - download it here.

5

Encontrado yo mismo:

de Windows se ve en el Directorio de la aplicación en primer lugar: Si SafeDllSearchMode está activado, el orden de búsqueda es el siguiente:

  1. El directorio desde el que carga la aplicación.
  2. El directorio del sistema. Use la función GetSystemDirectory para obtener la ruta de este directorio.
  3. El directorio del sistema de 16 bits. No hay ninguna función que obtenga la ruta de este directorio, pero se busca.
  4. El directorio de Windows. Use la función GetWindowsDirectory para obtener la ruta de este directorio.
  5. El directorio actual.
  6. Los directorios que se enumeran en la variable de entorno PATH. Tenga en cuenta que esto no incluye la ruta por aplicación especificada por la clave de registro App Paths. La clave App Paths no se usa al calcular la ruta de búsqueda de DLL.

Si SafeDllSearchMode está desactivado, el orden de búsqueda es el siguiente:

1. El directorio desde el que carga la aplicación. 2. El directorio actual. 3. El directorio del sistema. Use la función GetSystemDirectory para obtener la ruta de este directorio. 4. El directorio del sistema de 16 bits. No hay ninguna función que obtenga la ruta de este directorio, pero se busca. 5. El directorio de Windows. Use la función GetWindowsDirectory para obtener la ruta de este directorio. 6. Los directorios que se enumeran en la variable de entorno PATH. Tenga en cuenta que esto no incluye la ruta por aplicación especificada por la clave de registro App Paths. La clave App Paths no se usa al calcular la ruta de búsqueda de DLL.

acuerdo con: http://msdn.microsoft.com/en-us/library/ms682586.aspx

Pero puede redirigir donde se busca .dll que está utilizando un Manifiesto:

http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx

5

Puede ser una especie de confuso porque cada versión de Windows, las reglas cambio. Las versiones anteriores de Windows buscan la ruta antes del directorio actual.

Una solución sencilla y sin manifiestos:

Si el archivo ejecutable es A.EXE, añadir un archivo (de 0 bytes, vacío) en el mismo directorio con el nombre A.EXE.local - para las versiones anteriores de Windows Esto pone al directorio de aplicación por delante de la ruta en el orden de búsqueda.

+1

Esta es la respuesta correcta en Win2k +. Tenga en cuenta, sin embargo, que si A.EXE tiene un manifiesto incrustado, o si existe A.EXE.manifest (por ejemplo, para habilitar COM libre de registro, hacer que su PPP de programa sea consciente, etc.), se ignora el archivo .local , ya que los manifiestos están destinados a ser una tecnología de reemplazo. Si ese es el caso, en su manifiesto, puede simplemente enumerar los archivos que desea utilizar desde el directorio de su aplicación para forzarlos a cargarse desde allí:

6

La respuesta de Clay Nichol sobre el orden de búsqueda no es del todo correcta. Esa orden de búsqueda solo se aplica a los componentes que no son COM. Es decir. solo algunas DLL, y no OCX. Si registra sus objetos COM, se usarán desde el directorio donde están registrados, independientemente de lo que haya en el directorio local, , a menos que use un COM libre de registro o un archivo .local.

EDIT:

MakeMyManifest es bien habla de ella como una herramienta automática para la creación de manifiestos para los proyectos de Visual Basic 6, no han probado a mí mismo. DirectCOM también tiene fans, de nuevo, no lo he probado.

EDIT El sitio web de MMM está caido. Veo here que el autor estaba teniendo problemas con su alojamiento y proporcionó otra ubicación para obtener Make My Manifest - download it here.

Hay una técnica semiautomática para generar manifiestos COM sin registro. Puede crear los manifiestos con Visual Studio 2008 (puede usar una versión gratuita como Visual Basic Express Edition). Luego haga un par de ediciones a mano para hacer que los manifiestos sean adecuados para usar desde VB6. Consulte this section de este artículo de MSDN para obtener instrucciones paso a paso: ignore el resto del artículo sobre ClickOnce.

6

Colocar bibliotecas de componentes en la carpeta EXE (con o sin archivos .local) puede ser nocivo para la seguridad de las máquinas de destino también.

Los programas VB6 registrarán los componentes aquí a través del punto de entrada de autoregistro detrás de su espalda si no están previamente registrados. Luego, si la aplicación se mueve o quita, deja al usuario con una reinscripción interrumpida, posiblemente fatal para las aplicaciones instaladas posteriormente que utilizan algunos de los mismos componentes. Sin embargo, esto está bien para los componentes específicos de la aplicación, es decir, su propia DLL u OCX que hará que nunca sea necesario por otra aplicación.

El truco .local en realidad no fue diseñado para ser utilizado con los programas VB6 y, si lo usa, su instalador debe tener en cuenta e instalar y registrar adecuadamente los componentes si aún no están en la máquina. Se suponía que era un truco manual para solucionar problemas de compatibilidad de versiones de DLL en máquinas individuales, no una estrategia de implementación.

Vaya a la aplicación SxS y manifiestos de ensamblaje (COM Reg-Free y más) para una mejor solución. La redirección de DLL/COM (.local) fue un buen intento, pero tiene muchas verrugas.

Cuestiones relacionadas