Bonjour à tous, le code suivant est sensé décharger les dll d'un composant Adobe servant à afficher des pdf dans des appli .NET, car sur certaines config (apparement winXP avec Acrobat 9) cela provoque une exception à la fermeture de l'application.
Mais ce code provoque une exception ... dans les autres cas (sous vista, ou sur lorsque la version Adobe n'est pas la 9 sur XP).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Process a = Process.GetCurrentProcess(); bool foundone = true; while (foundone) { foundone = false; ProcessModuleCollection ObjModules = a.Modules; // Iterate through the module collection. foreach (ProcessModule objModule in ObjModules) { // find acrobat PDF "AcroPDF" in program files if (objModule.ModuleName.Contains(@"AcroPDF") || objModule.ModuleName.Contains(@"AcroRd")) { foundone = true; int handle = GetModuleHandle(objModule.ModuleName); if (handle != 0) FreeLibrary(handle); } } }
Je voudrais éviter de tester le système et la version d'Adobe, et plutôt sécuriser le "FreeLibrary".
J'ai parcouru la doc MSDN concernant les API Win32, il y est dit explicitement
Bien bien ... mais ils ne précisent pas comment.Use caution when calling FreeLibrary with a handle returned by GetModuleHandle
Dans mon cas, le handle est bien != 0 mais Freelibrary plante quand même.
Quelqu'un aurait-il une idée ?
Partager