Kadang-kadang ketika saya melakukan proyek kecil saya tidak cukup hati-hati dan secara tidak sengaja menambahkan ketergantungan untuk DLL yang tidak saya sadari. Ketika saya mengirimkan program ini ke teman atau orang lain, "itu tidak berhasil" karena "beberapa DLL" tidak ada. Ini tentu saja karena program dapat menemukan DLL di sistem saya, tetapi tidak pada mereka.
Apakah ada cara untuk memindai executable untuk dependensi DLL atau menjalankan program dalam lingkungan bebas-bersih "DLL untuk pengujian untuk mencegah situasi oops ini?
windows
dll
dependencies
orlp
sumber
sumber
dumpbin /dependents <program>
. Saya menduga daftar akan lebih relevan daripada daftar semua DLL di%SYSTEM%
atau%SYSTEM32%
. Juga lihat Opsi DUMPBIN di MSDN.Jawaban:
Coba
Dependency Walker
(pembaruan terakhir pada tahun 2006) atau penulisan ulang modern yang disebutDependencies
.sumber
dumpbin
over walker ketergantungan. msdn.microsoft.com/en-us/library/756as972.aspx | stackoverflow.com/a/28304716/3543437dumpbin
dari alat Visual Studio (folder VC \ bin) dapat membantu di sini:sumber
dumpbin.exe
sangat berguna untuk mencari tahu/dependents
dan/imports
. Anda juga dapat menggunakannya di komputer lain jika Anda menyalinnyalink.exe
dan memastikan Visual C86 x + Runtime Redistributable (msvcr120.dll
untuk Visual Studio 2013) yang sesuai tersedia di mesin target. Beberapa opsi memiliki dependensi tambahan. - Ngomong-ngomong, mereka mengacaukan nama opsi, itu seharusnya/PREREQUISITES
bukan/DEPENDENTS
, mereka seharusnya belajar bahasa Latin.Saya dapat merekomendasikan solusi menarik untuk penggemar Linux. Setelah saya menjelajahi solusi ini, saya telah beralih dari DependencyWalker ke ini.
Anda dapat menggunakan favorit Anda
ldd
atas Windows terkaitexe
,dll
.Untuk melakukan ini, Anda perlu menginstal Cygwin (instalasi dasar, tanpa paket tambahan yang diperlukan) pada Windows Anda dan kemudian mulai saja
Cygwin Terminal
. Sekarang Anda dapat menjalankan perintah Linux favorit Anda, termasuk:UPD: Anda dapat menggunakan
ldd
juga melalui terminal git bash pada Windows . Tidak perlu menginstal cygwin jika Anda sudah menginstal git.sumber
$ ldd ./Debug/helloworld.exe ??? => ??? (0x77d60000)
. Tempat sampah utilitas menunjukkan semua dependensi dengan benar.Cari tahu path file lengkap ke majelis yang Anda coba kerjakan
Tekan tombol mulai, ketik "dev". Luncurkan program yang disebut "Prompt Perintah Pengembang untuk VS 2017"
Di jendela yang terbuka, ketik
dumpbin /dependents [path]
, di mana[path]
jalur yang Anda temukan di langkah 1tekan tombol enter
Bam, Anda punya informasi ketergantungan Anda. Jendela akan terlihat seperti ini:
Pembaruan untuk VS 2019: Anda memerlukan paket ini dalam instalasi VS Anda:
sumber
sumber
depends
tidak mendukung set API sehingga tidak berguna untuk Win7 +.Yang paling aman adalah memiliki mesin virtual yang bersih, di mana Anda dapat menguji program Anda. Pada setiap versi yang ingin Anda uji, kembalikan VM ke nilai bersih semula. Kemudian instal program Anda menggunakan pengaturannya, dan lihat apakah itu berfungsi.
Masalah Dll memiliki wajah yang berbeda. Jika Anda menggunakan Visual Studio dan secara dinamis menautkan ke CRT, Anda harus mendistribusikan CRT DLL. Perbarui VS Anda, dan Anda harus mendistribusikan versi CRT lainnya. Hanya memeriksa dependensi saja tidak cukup, karena Anda mungkin melewatkannya. Melakukan instalasi penuh pada mesin yang bersih adalah satu-satunya solusi aman, IMO.
Jika Anda tidak ingin mengatur lingkungan pengujian full-blown dan memiliki Windows 7, Anda dapat menggunakan XP-Mode sebagai mesin pembersih awal, dan XP-More untuk menduplikasi VM.
sumber
Di mesin pengembangan Anda, Anda dapat menjalankan program dan menjalankan Sysinternals Process Explorer . Di panel bawah, ini akan menunjukkan kepada Anda DLL yang dimuat dan jalur saat ini ke mereka yang berguna karena sejumlah alasan. Jika Anda menjalankan paket penerapan Anda, itu akan mengungkapkan DLL mana yang dirujuk di jalur yang salah (yaitu tidak dikemas dengan benar).
Saat ini, perusahaan kami menggunakan proyek-proyek Installer Visual Studio untuk menjalankan pohon dependensi dan output sebagai file longgar program. Di VS2013, ini sekarang merupakan ekstensi: https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d . Kami kemudian mengemas file-file longgar ini dalam installer yang lebih komprehensif tetapi setidaknya proyek setup semua dependensi dot net dan menjatuhkannya ke satu tempat dan memperingatkan Anda ketika ada yang hilang.
sumber
Di masa lalu (yaitu hari WinXP), saya dulu bergantung / bergantung pada DLL Dependency Walker (depend.exe) tetapi ada kalanya saya masih tidak dapat menentukan masalah DLL (s). Idealnya, kami ingin mencari tahu sebelum runtime oleh inspeksi tetapi jika itu tidak menyelesaikannya (atau mengambil terlalu banyak waktu), Anda dapat mencoba mengaktifkan "snap loader" seperti yang dijelaskan pada http://blogs.msdn.com/ b / junfeng / archive / 2006/11/20 / debugging-loadlibrary-failures.aspx dan https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886(v=vs.85).aspx dan secara singkat disebutkan LoadLibrary gagal; GetLastError tidak membantu
PERINGATAN: Saya telah mengacaukan Windows saya di masa lalu bermain-main dengan gflag membuatnya merangkak ke lutut, Anda telah diperingatkan sebelumnya.
Catatan: "Loader snap" adalah per-proses sehingga UI aktif tidak akan tetap diperiksa (gunakan cdb atau glfags -i)
sumber
NDepend sudah disebutkan oleh Jesse (jika Anda menganalisis kode .NET) tetapi mari kita jelaskan bagaimana itu bisa membantu.
Di panel Properti Proyek NDepend, Anda dapat menentukan apa yang rakitan aplikasi untuk dianalisis (berwarna hijau) dan NDepend akan menyimpulkan rakitan Pihak Ketiga yang digunakan oleh aplikasi tersebut (berwarna biru). Daftar direktori tempat mencari aplikasi dan majelis pihak ketiga disediakan.
Jika perakitan pihak ketiga tidak ditemukan di direktori ini, itu akan berada dalam mode kesalahan. Sebagai contoh jika saya menghapus direktori .NET Fx
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
saya bisa melihat bahwa .NET Fx pihak ketiga tidak diselesaikan:Penafian: Saya bekerja untuk NDepend
sumber
Silakan cari "depend.exe" di google, ini adalah utilitas kecil untuk menangani ini.
sumber
Jika Anda memiliki kode sumber, Anda dapat menggunakan ndepend.
http://www.ndepend.com/
Ini mahal dan melakukan lebih dari menganalisis dependensi sehingga mungkin berlebihan untuk apa yang Anda cari.
sumber
LoadLibraryEx
...LoadLibraryEx
tidak membantu di sana.Proyek pedeps ( https://github.com/brechtsanders/pedeps ) memiliki alat baris perintah (copypedeps) untuk menyalin file .exe (atau .dll) Anda bersama dengan semua file yang bergantung padanya. Jika Anda melakukannya pada sistem di mana aplikasi bekerja, Anda harus dapat mengirimkannya dengan semua DLL ketergantungannya.
sumber
Silakan lihat toolkit SysInternal dari Microsoft dari tautan di bawah ini, https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Buka folder unduhan, Buka "Procexp64.exe" sebagai hak istimewa admin. Buka Find Menu-> "Find Handle atau DLL" pilihan atau cara pintas Ctrl + F.
sumber
Coba JetBrains dotPeek . Gratis.
sumber