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.

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);
                    }
                }
            }
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).

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

Use caution when calling FreeLibrary with a handle returned by GetModuleHandle
Bien bien ... mais ils ne précisent pas comment.
Dans mon cas, le handle est bien != 0 mais Freelibrary plante quand même.

Quelqu'un aurait-il une idée ?