Saya memiliki aplikasi klien / server yang telah saya kembangkan pada satu PC. Sekarang perlu dua port serial, jadi saya meminjam PC dari seorang teman.
Ketika saya membangun aplikasi saya dan mencoba menjalankan atau men-debug-nya (apakah dalam Delphi IDE atau dari Windows File manager), kesalahan "Aplikasi tidak dapat memulai dengan benar (0xc000007b)".
Googling tidak memunculkan banyak hal, tetapi tampaknya menunjukkan bahwa ini bukan hal yang spesifik untuk Delphi dan terjadi dengan aplikasi lain. Tampaknya disebabkan oleh panggilan ke DLL 32 bit dari aplikasi 64 bit atau sebaliknya.
- kedua PC adalah Windows 7, 64 bit
- keduanya memiliki edisi pemula Delphi Xe2 yang hanya dapat menangani 32 bit
- Aplikasi ini berjalan dengan baik di PC saya, tetapi tidak di teman saya
- Aplikasi Delphi lainnya berjalan dengan baik di kedua PC
Adakah yang bisa memberi saya petunjuk tentang cara melacak ini?
STATUS_INVALID_IMAGE_FORMAT
. Anda tidak mendapatkan itu ketika sistem tidak dapat menemukan DLL dari nama itu. Anda dapatkanSTATUS_INVALID_IMAGE_FORMAT
ketika DLL dapat ditemukan, tetapi rusak, atau memiliki bitness yang salah.Jawaban:
Untuk memulai, saya akan menyarankan untuk menguji apakah ada masalah antara aplikasi Anda dan dependensinya menggunakan dependensi walker
sumber
Ketergantungan waktu buka tidak dapat diselesaikan. Cara termudah untuk men-debug ini adalah dengan menggunakan Dependency Walker . Gunakan opsi Profil untuk mendapatkan hasil diagnostik dari proses pemuatan. Ini akan mengidentifikasi titik kegagalan dan akan memandu Anda menuju solusi.
Penyebab paling umum dari kesalahan ini adalah mencoba memuat DLL 64 bit ke dalam proses 32 bit, atau sebaliknya.
sumber
Ini adalah dll yang hilang. Mungkin, dll Anda yang bekerja dengan port com memiliki ketergantungan dll yang belum terselesaikan. Anda dapat menggunakan dependensi walker dan windows debugger. Periksa semua perpustakaan mfc, misalnya. Anda juga dapat menggunakan nrCommlib - ini adalah komponen yang bagus untuk bekerja dengan port com.
sumber
Saya mencoba semua hal yang ditentukan di sini dan menemukan jawaban lain. Saya harus mengkompilasi aplikasi saya dengan DLL 32-bit. Saya telah membangun perpustakaan baik dalam 32-bit dan 64-bit tetapi saya telah
PATH
menetapkan untuk perpustakaan 64-bit. Setelah saya mengkompilasi ulang aplikasi saya (dengan sejumlah perubahan dalam kode saya juga) saya mendapatkan kesalahan yang menakutkan ini dan berjuang selama dua hari. Akhirnya, setelah mencoba beberapa hal lain, saya mengubah sayaPATH
untuk memiliki DLL 32-bit sebelum 64-bit DLL (mereka memiliki nama yang sama). Dan itu berhasil. Saya hanya menambahkannya di sini untuk kelengkapan.sumber
Telah disebutkan dalam jawaban sebelumnya bahwa menggunakan dependensi walker adalah cara untuk pergi, dalam kasus saya (aplikasi saya terus gagal dengan kode kesalahan), dependensi walker menunjukkan beberapa dll yang TIDAK relevan!
Akhirnya tahu bahwa saya dapat menjalankan profil dengan pergi ke menu "profil" dan itu akan menjalankan aplikasi dan berhenti di dll yang menyebabkan masalah! Saya menemukan 32bit dll dipilih karena jalur dan memperbaikinya.
sumber
Saya baru-baru ini memiliki masalah ketika saya sedang mengembangkan aplikasi (yang menggunakan port serial) dan bekerja pada semua mesin yang saya uji tetapi beberapa orang mendapatkan kesalahan ini.
Ternyata semua mesin yang mengalami kesalahan menjalankan Win7 x64 dan TIDAK PERNAH SEKALI diperbarui.
Menjalankan pembaruan Windows memperbaiki semua mesin dalam kasus khusus saya.
sumber
Saya mengalami masalah yang sama mengembangkan aplikasi client-server menggunakan Microsoft Visual Studio 2012.
Jika Anda menggunakan Visual Studio untuk mengembangkan aplikasi, Anda harus memastikan yang baru (yaitu komputer tempat perangkat lunak itu tidak dikembangkan) memiliki Paket Microsoft Visual C ++ Redistributable yang sesuai. Dengan tepat, Anda memerlukan versi tahun dan bit yang tepat (yaitu x86 untuk 32 bit dan x64 untuk 64 bit) dari Paket Visual C ++ Redistributable.
Berikut ini tautan ke Visual C ++ Redistributable untuk Visual Studio 2015 .
Anda dapat memeriksa versi apa yang diinstal dengan masuk ke Control Panel -> Program -> Program dan Fitur.
Inilah cara saya mendapatkan kesalahan ini dan memperbaikinya:
1) Saya mengembangkan aplikasi 32 bit menggunakan Visual Studio 2012 di komputer saya. Sebut saja komputer saya ComputerA.
2) Saya menginstal .exe dan file terkait di komputer yang berbeda kami akan memanggil ComputerB.
3) Di ComputerB, saya menjalankan .exe dan mendapatkan pesan kesalahan.
4) Di ComputerB, saya melihat Program dan Fitur dan tidak melihat Visual C ++ 2012 Redistributable (x64).
5) Di ComputerB, saya googled untuk Visual C ++ 2012 Redistributable dan memilih dan menginstal versi x64.
6) Di ComputerB, saya menjalankan .exe di ComputerB dan tidak menerima pesan kesalahan.
sumber
Sebenarnya kesalahan ini menunjukkan ke format gambar tidak valid. Namun, mengapa ini terjadi dan apa arti kode kesalahan biasanya? Sebenarnya ini bisa muncul ketika Anda mencoba menjalankan program yang dibuat untuk atau dimaksudkan untuk bekerja dengan sistem operasi Windows 64 bit, tetapi komputer Anda berjalan pada sistem operasi 32 bit.
Kemungkinan Alasan:
Sumber: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/
sumber
Ini mungkin merupakan kasus di mana debugging debugger mungkin berguna. Pada dasarnya jika Anda mengikuti instruksi di sini Anda dapat menjalankan dua ide dan satu akan men-debug ke yang lain. Jika Anda menghapus aplikasi Anda dalam satu, Anda kadang-kadang dapat menangkap kesalahan yang sebaliknya Anda lewatkan. Layak untuk dicoba.
sumber
Saya telah melihat kesalahan mencoba menjalankan VC ++ debug yang dapat dieksekusi pada mesin yang tidak memiliki Visual C ++ diinstal. Membangun versi rilis dan menggunakannya untuk memperbaikinya.
sumber
Dalam kasus saya kesalahan terjadi ketika saya mengganti nama DLL setelah membangunnya (menggunakan Visual Studio 2015), sehingga cocok dengan nama yang diharapkan oleh executable, yang tergantung pada DLL. Setelah penamaan ulang daftar simbol yang diekspor yang ditampilkan oleh Dependency Walker kosong, dan pesan galat yang mengatakan "Aplikasi tidak dapat memulai dengan benar" ditampilkan.
Jadi itu bisa diperbaiki dengan mengubah nama file output di opsi Visual Studio linker.
sumber
Anda dapat memiliki ini jika Anda mencoba untuk mewujudkan aplikasi Anda yang memiliki ketergantungan pada Microsoft.Windows.Common-Controls perakitan . Anda melakukan ini ketika Anda ingin memuat Versi 6 dari perpustakaan kontrol umum - sehingga gaya visual diterapkan ke kontrol umum.
Anda mungkin mengikuti cara dokumentasi asli Microsoft sejak hari-hari Windows XP, dan menambahkan yang berikut ini ke manifes aplikasi Anda:
Windows XP bukan lagi OS, dan Anda bukan lagi aplikasi 32-bit. Dalam 17 tahun intervensi Microsoft memperbarui dokumentasi mereka ; sekarang saatnya bagi Anda untuk memperbarui manifes Anda:
Raymond Chen memiliki sejarah Kontrol Umum yang indah:
sumber
Baru saja menyelesaikan masalah ini untuk proyek pribadi saya (terima kasih kepada Dries untuk itu). Bagi saya itu karena jalur proyek terlalu panjang. Setelah menyimpan .sln ke jalur yang lebih pendek (C: / MyProjects) dan mengkompilasi dari sana ia berjalan tanpa kesalahan.
sumber
Juga unduh dan hapus zip "Ketergantungan" ke folder yang sama tempat Anda meletakkan wget.exe
http://gnuwin32.sourceforge.net/packages/wget.htm
Anda kemudian akan memiliki beberapa file lib * .dll serta wget.exe di folder yang sama dan itu akan berfungsi dengan baik.
(Saya juga menjawab di sini https://superuser.com/a/873531/146668 yang awalnya saya temukan.)
sumber
Saya baru saja mengalami masalah ini. Saya mencari "C ++" di bawah "Aplikasi & Fitur" saya di panel kontrol Windows 10 dan memperhatikan bahwa beberapa jenis pembaruan baru saja berjalan beberapa hari sebelumnya dan menginstal VC ++ Redistributable 2012-2017. Aplikasi yang menjalankan pesan kesalahan hanya membutuhkan VC ++ 2010. Saya mencopot semuanya dan menginstal ulang 2010 x86 / x64, dan kesalahan hilang dan aplikasi berfungsi seperti yang diharapkan.
sumber
Itu bisa terjadi jika karena alasan tertentu sumber daya x86 diambil dari mesin x64. Untuk menghindari itu secara eksplisit, tambahkan direktif preprocessor ini ke stdafx.h (tentu saja, dalam contoh saya sumber daya yang bermasalah adalah Windows Common Controls DLL.
sumber
processorArchitecture='*'
, dan hanya itu yang ada untuk itu.Mungkin saja Anda memiliki beberapa versi dll. Pada sistem Anda. Anda dapat mencari di sistem Anda untuk mengetahuinya. Masalah ini dapat diselesaikan dengan hanya mengubah urutan direktori di jalur Anda. Ini masalah saya. ( Tidak dapat menjalankan Qt Creator GUI di luar Qt. "Aplikasi tidak dapat memulai dengan benar (0xc000007b)" kesalahan )
sumber