tag online mp3tag windows dll dependencies

windows - online - ¿Cómo verificar la dependencia de DLL?



mp3tag online (10)

  1. Hay un programa llamado "Depende"
  2. Si tiene instalado cygwin, nada más sencillo que ldd file.exe

A veces, cuando estoy haciendo un pequeño proyecto, no soy lo suficientemente cuidadoso y accidentalmente agrego una dependencia para una DLL que no conozco. Cuando envío este programa a un amigo u otras personas, "no funciona" porque falta "alguna DLL". Esto es, por supuesto, porque el programa puede encontrar el archivo DLL en mi sistema, pero no en el suyo.

¿Existe un programa / script que pueda escanear un ejecutable para dependencias de DLL o ejecutar el programa en un entorno libre de DLL "limpio" para probarlo y evitar estas situaciones?


Busque "depends.exe" en google, es una pequeña utilidad para manejar esto.


En el pasado (es decir, días de WinXP), solía depender / depender de DLL Dependency Walker (depends.exe), pero a veces aún no puedo determinar el (los) problema (s) de la DLL. Idealmente, nos gustaría averiguar antes del tiempo de ejecución mediante inspecciones, pero si eso no lo resuelve (o toma demasiado tiempo), puede intentar habilitar la "instantánea del cargador" como se describe en http://blogs.msdn.com/b/junfeng/archive/2006/11/20/debugging-loadlibrary-failures.aspx y https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx y mencionó brevemente que LoadLibrary falla; GetLastError no help

ADVERTENCIA: He arruinado mi Windows en el pasado jugando con gflag haciéndolo caer de rodillas, ya lo han advertido.

Nota: "Ajuste instantáneo del cargador" es por proceso, por lo que la habilitación de la interfaz de usuario no se mantendrá activada (utilice cdb o glfags -i)


En su máquina de desarrollo, puede ejecutar el programa y ejecutar Sysinternals Process Explorer . En el panel inferior, le mostrará los archivos DLL cargados y las rutas actuales hacia ellos, lo cual es útil por varias razones. Si está ejecutando su paquete de implementación, revelaría qué archivos DLL están referenciados en la ruta incorrecta (es decir, no estaban empaquetados correctamente).

Actualmente, nuestra empresa utiliza proyectos de Visual Studio Installer para recorrer el árbol de dependencias y generar como archivos sueltos el programa. En VS2013, ahora es una extensión: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d . A continuación, empaquetamos estos archivos sueltos en un instalador más completo, pero al menos esa configuración proyecta todas las dependencias de dot net y las coloca en un solo lugar y le avisa cuando faltan cosas.


Lo más seguro es tener una máquina virtual limpia, en la que pueda probar su programa. En cada versión que quiera probar, restaure la VM a su valor de limpieza inicial. Luego instale su programa usando su configuración, y vea si funciona.

Todos los problemas tienen caras diferentes. Si utiliza Visual Studio y se vincula dinámicamente con el CRT, debe distribuir los archivos DLL CRT. Actualice su VS, y debe distribuir otra versión del CRT. Solo ver las dependencias no es suficiente, ya que es posible que las eches de menos. Hacer una instalación completa en una máquina limpia es la única solución segura, la OMI.

Si no desea configurar un entorno de prueba completo y tiene Windows 7, puede usar XP-Mode como la máquina limpia inicial y XP-More para duplicar la máquina virtual.


NDepend ya fue mencionado por Jesse (si se analiza el código .NET), pero vamos a explicar exactamente cómo puede ayudar.

¿Existe un programa / script que pueda escanear un ejecutable para dependencias de DLL o ejecutar el programa en un entorno libre de DLL "limpio" para probarlo y evitar estas situaciones?

En el panel NDepend Project Properties, puede definir qué conjuntos de aplicaciones analizar (en verde) y NDepend deducirá los ensamblados de terceros utilizados por los de la aplicación (en azul). Se proporciona una lista de directorios donde buscar aplicaciones y ensamblajes de terceros.

Si no se encuentra un ensamblado de terceros en estos directorios, estará en modo de error. Por ejemplo, si elimino el directorio .NET Fx C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319 , puedo ver que los ensamblados de terceros .NET Fx no se resuelven:

Descargo de responsabilidad: trabajo para NDepend



Puedo recomendar una solución interesante para los fanáticos de Linux. Después de explorar esta solución, cambié de DependencyWalker a esto.

Puede usar su ldd favorito sobre el exe relacionado con Windows, dll .

Para hacer esto, necesita instalar Cygwin (instalación básica, sin paquetes adicionales requeridos) en su Windows y luego simplemente iniciar Cygwin Terminal . Ahora puede ejecutar sus comandos favoritos de Linux, que incluyen:

$ ldd your_dll_file.dll


Si tiene el código fuente, puede usar ndepend.

http://www.ndepend.com/

Es caro y hace mucho más que analizar las dependencias, por lo que podría ser excesivo para lo que estás buscando.


dumpbin de las herramientas de Visual Studio (carpeta VC / bin) puede ayudar aquí:

dumpbin /dependents your_dll_file.dll