Uygulama DLL, .exe klasöründe DLL'nin, System32 dosyasının DLL'sinde olması durumunda hata veriyor (hata 0xc0000428 “<dll name> ya Windows'da çalışmak üzere tasarlanmadı…”)


0

Eğer exe'yi çalıştırıp DLL dosyasını aynı kütüphanede çalıştırırsam, bir uygulamamız var (test aracı). DLL'i c: \ windows \ system32'ye taşır ve exe'yi denersem, aşağıdaki iletiyle başarısız olur. Windows 8.1 tableti.

Neler olup bittiği hakkında herhangi bir ipucu var mı? Ayrıca DLL imzalamaya çalıştı, hayır gitmek.

"Windows'da çalışmak üzere tasarlanmamış veya bir hata içeriyor. Yüklemeyi deneyin ...... Hata durumu 0xc0000428"


1
Program, yalnızca bulunduğu klasörü bulmak için tasarlandı. Bu aslında doğru davranış.
Ramhound

8.1 tablet kazan derken, bir ARM veya x86 platformunda mısınız? dll'nizin yanlış platform için derlenmişse herhangi bir klasörden çalışmasını beklemiyorum.
Frank Thomas

@ FrankThomas - ARM
ranshe

Yanıtlar:


0

Ne tür bir .exe bu açıkça .dll ile aynı dizinde çalıştırılması gerekir. Yürütülebilir dosya, aynı çalışma dizini dışındaysa, uygulamanın doğru çalışması için gerekli bir kaynak olan .dll dosyasını bulamaz. Uygulamayı tasarlayan programcı olmadığınız (veya bilmediğiniz) olmadığı sürece, aynı dizinde değilse, yürütülebilir dosyayı bu .dll dosyasını bulma seçeneği yoktur. .Exe kısayolu yapmayı ve .exe + .dll dosyasını başka bir dizinde eşleştirmeyi düşünebilirsiniz.


Merhaba, DLL hiç bulunmazsa hata mesajı tamamen farklı ve aslında DLL eksik olduğunu söylüyor.
ranshe

.Exe ve .dll dahil tüm klasörü başka bir dizine taşıyabilir ve oradan çalıştırabilir misiniz? Bu durum çok spesifiktir ve uygulama ile ilgili ayrıntılı bilgi olmadan teşhis edilmesi giderek zorlaşır.
root

@ranshe - Öyle. Programın onu aramak için tasarlandığı yerde değil.
Ramhound

DLL aynı klasörde olduğu sürece uygulamayı her yerden çalıştırabilirim. Önceki sürümlerde, w / DLL'yi System32 da çalıştırabilirdim. Bu sürümde (ve önceki), DLL tamamen eksikse, geri gelen hata DLL eksiktir, bu yüzden onu System32 da aramayı bilir.
ranshe

@ranshe Bunu test edebilir misiniz?
root

0

Sisteminizde DLL'nin (aynı adı taşıyan) iki sürümü olabilir; biri sisteminize uygun, diğeri ise uyumlu değildir.

EXE dosyasındaki 'doğru' DLL dosyanız olduğunda, ilk kontrol ettiği yer ve bu nedenle doğru olanı bulur ve kullanır.

Bu çalışma dll dosyasını System32'a taşırsanız, PATH içindedir, ancak şimdi arama sırası listesinin aşağısındadır. Ne kadar ileride sizin PATH'ınıza bağlıdır.

DLL'nin çalışmayan sürümü, System32'a taşıdığınızdan önceki arama sırasında sona ererse, program bu sürümü kullanmaya çalışacaktır (önce onu bulduğundan beri).

Sisteminizdeki tüm klasörleri bu DLL dosyasının diğer sürümleri için arayın ve (yeniden) DLL yolu arama sırasından çıkarmak için mümkünse taşıyın.


Bu iyi bir fikir - Birkaç saat sonra cihazı geri alacağım ve deneyeceğim, teşekkürler
ranshe

0

Bu bir imza sorunuydu. Denetim Modu'nu etkinleştirdikten sonra, iyiydik (hata mesajı yok). Hangi partinin hangi bileşeni imzalaması gerektiğini çözeceğiz, ama en azından nereye bakacağımızı biliyoruz.

Katılan herkese teşekkürler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.