Como verificar a Dependência DLL?

Às vezes, quando estou a fazer um pequeno projecto, Não tenho cuidado suficiente e acidentalmente adiciono uma dependência de um DLL que não conheço. Quando envio este programa a um amigo ou a outras pessoas "não funciona" porque "algum DLL" está desaparecido. Isto é claro porque o programa pode encontrar o DLL no meu sistema, mas não no deles.

Existe um programa / script que pode digitalizar um executável para dependências DLL ou executar o programa num ambiente "limpo" DLL-livre para testar prevenir estas situações?

Author: Sam, 2011-09-11

10 answers

Tente a dependência walker: http://www.dependencywalker.com/

 72
Author: Luchian Grigore, 2013-05-08 15:31:10

dumpbin a partir de ferramentas visuais de estúdio (pasta VC\bin) pode ajudar aqui:

dumpbin /dependents your_dll_file.dll
 135
Author: JeffRSon, 2015-02-03 17:07:24

Posso recomendar uma solução interessante para os fãs do Linux. Depois de explorar esta solução, mudei de DependencyWalker para isto.

Podes usar o teu favorito.ldd sobre as janelasexe, dll.

Para o fazer, terá de instalar o Cygwin (instalação básica, sem necessidade de pacotes adicionais) nas suas janelas e, em seguida, iniciar Cygwin Terminal. Agora você pode executar os seus comandos Linux favoritos, incluindo:

$ ldd your_dll_file.dll

UPD: Você pode use ldd também através do terminal git bash no Windows . Não é necessário instalar o cygwin no caso de já ter o git instalado.

 23
Author: troyane, 2018-09-22 15:24:02
  1. Existe um programa chamado "depende"
  2. Se tiver o cygwin instalado, nada mais simples do que o ficheiro ldd.exe
 10
Author: Artyom, 2011-09-11 14:47:26
O mais seguro é ter uma máquina virtual limpa, na qual possa testar o seu programa. Em todas as versões que você gostaria de testar, restaurar o VM para o seu valor limpo inicial. Em seguida, instalar o seu programa usando a sua configuração, e ver se ele funciona.

Os problemas do Dll têm faces diferentes. Se você usar o Visual Studio e dynamically link para o CRT, você tem que distribuir os DLLs CRT. Atualize seu VS, e você tem que distribuir outra versão do CRT. Apenas verificar dependências não é suficiente, como podes perder isso. Fazer uma instalação completa em uma máquina limpa é a única solução segura, IMO.

Se não quiser configurar um ambiente de ensaio completo e ter o Windows 7, pode usar o Modo XP como a máquina limpa inicial e XP-More para duplicar o VM.

 7
Author: eran, 2011-09-11 14:48:40

Na sua máquina de desenvolvimento, pode executar o programa e executar O Sysinternals Process Explorer . Na área inferior, ele irá mostrar-lhe os DLLs carregados e os caminhos atuais para eles, o que é útil por uma série de razões. Se você estiver executando fora de seu pacote de implantação, ele iria revelar quais DLLs são referenciados no caminho errado (ou seja, não foram empacotados corretamente).

Actualmente, a nossa empresa utiliza projectos de instaladores visuais para percorrer a árvore de dependências e a produção como solta os ficheiros do programa. Em VS2013, isto é, agora, uma extensão: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d. Nós, em seguida, compactar estes arquivos soltos em uma análise mais abrangente installer, mas, pelo menos, que o projeto de instalação de todos os dot net dependências e cai em um lugar e avisa quando as coisas estão em falta.
 5
Author: Shiv, 2016-11-27 14:07:48

No passado (isto é, Dias de WinXP), eu costumava depender/confiar no andador de Dependência DLL (depende.exe) mas há momentos em que eu ainda não sou capaz de determinar a(s) questão (s) DLL. Idealmente, gostaríamos de descobrir antes do tempo de execução pelas inspeções, mas se isso não resolver (ou demorar muito tempo), você pode tentar activar o "snap do carregador", como descrito em http://blogs.msdn.com/b/junfeng/archive/2006/11/20/debugging-loadlibrary-failures.aspx e https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs. 85).aspx e brevemente mencionado LoadLibrary falha; GetLastError nenhuma ajuda

Aviso: já estraguei as minhas janelas no passado, a brincar com o gflag, a fazê-lo rastejar até aos joelhos, foste avisado.

enter image description here

Nota: "carregador snap" é por processo, pelo que a opção UI não fica assinalada (use cdb ou glfags-i)

 2
Author: HidekiAI, 2017-05-23 12:03:05
Por favor, procure "depende.exe " no google, é uma pequena utilidade para lidar com isso.
 1
Author: shiying yu, 2011-09-11 14:47:05

Se tiver o código-fonte, pode usar o ndepend.

Http://www.ndepend.com/

É caro e faz muito mais do que analisar dependências para que possa ser exagerado para o que você está procurando.

 1
Author: Jesse, 2015-08-14 15:36:41

O NDepend já foi mencionado pelo Jesse (se analisar o código. net), mas vamos explicar exactamente como pode ajudar.

Existe um programa/script que possa digitalizar um executável para DLL dependências ou executar o programa em um ambiente" limpo " livre de DLL para testar para evitar estas situações Opa?

No painel de Propriedades do projecto NDepend, poderá definir o que são conjuntos de aplicações a analisar (em verde) e O NDepend irá inferir conjuntos de terceiros usado pelas aplicações (em azul). Uma lista de diretórios onde procurar aplicações e conjuntos de terceiros é fornecida.

NDepend Project Properties Application and Third-Party assemblies

Se um conjunto de terceiros não for encontrado nestes directórios, estará no modo de erro. Por exemplo, se remover a pasta Fx. net C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 consigo ver que os conjuntos de terceiros. net Fx não estão resolvidos:

NDepend Project Properties Application and Third-Party assemblies not resolved

Aviso: trabalho para o NDepend

 1
Author: Patrick from NDepend team, 2017-06-12 13:49:46