Como verificar a Dependência DLL?
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?
10 answers
Tente a dependência walker: http://www.dependencywalker.com/
dumpbin
a partir de ferramentas visuais de estúdio (pasta VC\bin) pode ajudar aqui:
dumpbin /dependents your_dll_file.dll
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.
- Existe um programa chamado "depende"
- Se tiver o cygwin instalado, nada mais simples do que o ficheiro ldd.exe
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.
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.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.Nota: "carregador snap" é por processo, pelo que a opção UI não fica assinalada (use cdb ou glfags-i)
Se tiver o código-fonte, pode usar o ndepend.
É caro e faz muito mais do que analisar dependências para que possa ser exagerado para o que você está procurando.
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.
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:
Aviso: trabalho para o NDepend