geçici olarak DLL arama yollarına bir dizin eklemek istediğiniz geçici bir dizin ekleme - Windows 7 altında bunu yapmak için doğru bir yol var?, Windows 7'nin DLL arama yolları
Ben bir C# uygulaması var
Senaryo, en WonderApp diyelim.
WonderApp C:\MyPath
bulunan C++ DLL, çağırmak gerekiyor. Ayrıca DLL için dizinleri aramasına eklemek gerekir PATH
bir dizin ekleyerek this article göre
Environment.SetEnvironmentVariable("PATH",
"C:\\MyPath;" + Environment.GetEnvironmentVariable("PATH"));
: Yani WonderApp en Program.Main()
parçası olarak, ben aşağıdaki komutu eklendi.
çözüm Windows XP çalışıyor: Ben PATH
dizini eklerseniz, DLL yükler ve program gayet güzel çalışıyor. Dizini eklemezseniz, DLL, "bulunamadı" hatasıyla başarısız oluyor. Bu yüzden düşündüm
Ancak bu en SetDllDirectory()
kullanarak deneyelim,
Windows 7 için çalışmaz. Şunun gibi:
[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string lpPathName);
Ve daha ilerde:
bool success = SetDllDirectory(Util.Paths.GetApplicationDataDir());
success
değeri true
olmakla DLL hala yüklenmemesi.
Son olarak, uygulamayı çalıştırmadan önce PATH
'u C:\MyPath
'u dahil edecek şekilde ayarladıysam, her şey işe yarıyor! DLL yükler ve yalnızca iyi çalışır.
Yani, yeniden yinelerler için:
geçici Windows 7 altında DLL arama yollarına bir dizin eklemek için doğru yolu var mı?
GÜNCELLEME: Process Explorer kullanarak, uygulamanın çalışma zamanı Ortamı kontrol etti ve "C: \ MyPath" PATH
gerçekten de oldu! Dahası, Helper.dll
'un açık tutamaçları (DLL dosyası olarak değil, sadece bir dosya) listesinde olduğunu gördüm ve yine de onu bulmamaya karar verdiler.
bu Windows'un 64-bit sürümü mı görüyor musunuz? Gerçek yol adı nedir? –
Bu, 32 bit Windows 7 Home'dur. Ve DLL dosyasının tam yolu C: \ MyPath \ Helper.dll – scraimer
belki de diğer dlls eksik "help.exe" programında helper.dll yüklemeyi deneyin ve diğer dlls bağımlılıklarını kontrol edin. – OlimilOops