Bir yürütme süresinden sonra erişim ihlali istisnası atmaya başlayan bir üçüncü taraf DLL dosyaları arabası var. Bu olduğunda, o DLL dosyasını yeniden yüklemek istiyorum. Bunu nasıl yaparım?Yerel bir DLL dosyası dinamik olarak nasıl yüklenir ve boşaltır?
cevap
deneyin bu
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern bool FreeLibrary(IntPtr hModule);
//Load
IntPtr Handle = LoadLibrary(fileName);
if (Handle == IntPtr.Zero)
{
int errorCode = Marshal.GetLastWin32Error();
throw new Exception(string.Format("Failed to load library (ErrorCode: {0})",errorCode));
}
//Free
if(Handle != IntPtr.Zero)
FreeLibrary(Handle);
Eğer aracılığıyla iletişim kuran bir işçi süreç oluşturun WINAPI GetProcAddress
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
IntPtr funcaddr = GetProcAddress(Handle,functionName);
YourFunctionDelegate function = Marshal.GetDelegateForFunctionPointer(funcaddr,typeof(YourFunctionDelegate)) as YourFunctionDelegate ;
function.Invoke(pass here your parameters);
Ve dll işlevlerimi nasıl çağırırım? Onları "DllImport" olarak bildirdiğimde bu yaklaşım işe yaramıyor – Poma
Bunu çözdünüz mü? Yerel kodun bazı kod snipp'lerini sağlayabilir misiniz? Yerel kod nasıl bildirilmeli ve temsilci nasıl görünmelidir? Teşekkürler – freshWoWer
@Poma Bunu işe aldın mı? Lütfen GetDelegateForFunctionPointer'ın nasıl çalıştığını söyler misiniz? – GuidoG
kullanmak sonra öncelikle bu işlevi maçları delegeate oluşturmalısınız işlevleri çağırmak ve isterseniz COM veya başka bir IPC mekanizması. Sonra DLL öldüğünde, yalnızca çalışan işlemini yeniden başlatabilirsiniz.
dll'yi yükleyin, arayın ve sonra bitene kadar boşaltın.
Aşağıdaki kodu VB.Net örneği here'dan uyarladım.
[DllImport("powrprof.dll")] static extern bool IsPwrHibernateAllowed(); [DllImport("kernel32.dll")] static extern bool FreeLibrary(IntPtr hModule); [DllImport("kernel32.dll")] static extern bool LoadLibraryA(string hModule); [DllImport("kernel32.dll")] static extern bool GetModuleHandleExA(int dwFlags, string ModuleName, ref IntPtr phModule); static void Main(string[] args) { Console.WriteLine("Is Power Hibernate Allowed? " + DoIsPwrHibernateAllowed()); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } private static bool DoIsPwrHibernateAllowed() { LoadLibraryA("powrprof.dll"); var result = IsPwrHibernateAllowed(); var hMod = IntPtr.Zero; if (GetModuleHandleExA(0, "powrprof", ref hMod)) { while (FreeLibrary(hMod)) { } } return result; }
- 1. Yüklenebilir bir ELF yürütülebilir dosyası dinamik olarak nasıl yüklenir?
- 2. Komut dosyası nasıl yüklenir ve yeniden yüklenir?
- 3. Javascript dosyası nasıl bir Hizmet Çalışanı'nda dinamik olarak yüklenir?
- 4. Komut dosyası dosyaları dinamik olarak tepki ve kesme ile yüklenir
- 5. Ayrı bir Uygulama Ayarları dosyası dinamik olarak nasıl yüklenir ve geçerli ayarlarla birleştirilir?
- 6. Nesnel-C'de sınıf dinamik olarak nasıl yüklenir?
- 7. Yerel olarak npm jasmine nasıl yüklenir ve çalıştırılır
- 8. Yerel olarak silinmiş bir klasör nasıl geri yüklenir?
- 9. java'dan kitaplık (DLL) nasıl yüklenir JVM
- 10. Ebeveyn temasından bir php dosyası nasıl yüklenir
- 11. JSON dosyası nasıl yüklenir ve belirli bir nesneye dönüştürülür?
- 12. Dinamik olarak içe aktarma dosyası
- 13. C# Dll statik ve dinamik bağlama
- 14. Tek bir vhost dosyası nasıl "yeniden yüklenir"
- 15. .dll dosyası erişilebilir değil
- 16. Başka bir JavaScript dosyası nasıl yüklenir?
- 17. Leiningen repl'de bir clojure dosyası nasıl yüklenir?
- 18. .apk dosyası emülatöre nasıl yüklenir?
- 19. Kullanıcı hizmetini kullanarak dinamik olarak açısal durumlar nasıl yüklenir
- 20. Yerel Maven deposuna kaynaklar nasıl yüklenir
- 21. IE aralıklı olarak dinamik olarak eklenmiş bir komut dosyası yürütmez
- 22. Yerel json dosyasına nasıl erişilir ve içeriğe salt JavaScript ve AJAX ile nasıl yüklenir?
- 23. dinamik tablodan modal pencereye dinamik veritabanı nasıl yüklenir php
- 24. Yerel JSON dosyaları Javascript'e nasıl yüklenir
- 25. Yerel bir Windows uygulamasında bir kaynağa metin dosyası yerleştirme
- 26. HTML Ses() Yerel dosya nasıl yüklenir?
- 27. .NET'te hizmet olarak bir DLL nasıl çalıştırılır
- 28. Bir Android uygulamasının varsayılan yerel ayarı nasıl geri yüklenir
- 29. Yerel sistemden virtualenv'e lxml nasıl yüklenir?
- 30. Yerel graper dosya deposuna yapaylık nasıl yüklenir
nasıl tüm süreci bir proxy sürecine dll yüklenirken ve sonlandırmak olacak? Erişim ihlallerinden sonra genellikle bir süreç kırılır. – CodesInChaos
Nasıl yapmalı? AppDomains hakkında çok az şey duydum. Biraz örnek gönderir misiniz? – Poma
Yerel dll olduğu için, Uygulama Alanları size yardımcı olmayacaktır. Dll'yi yükleyen ve daha sonra işlemler arasındaki çağrıları aktarmak için bir çeşit süreçler arası iletişim kullanan ikinci bir işleminizin olması gerekir. .net remoting tek yönlü olabilir. Ama ben bunu kendim yapmadım. – CodesInChaos