[API W32] AccessViolationException FreeLibrary
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:
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
Citation:
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 ?