Je travaille sur un script Inno Setup et pendant la désinstallation, j'appelle une DLL personnalisée pour effectuer une opération de Revert. Malheureusement, une fois la désinstallation terminée, la DLL et ses dépendances n'ont pas été supprimées, malgré le fait que j'ai appelé UnloadDLL et DeleteFile. Pourquoi UnloadDLL échoue-t-il? Est-il possible de charger la DLL dynamique avec LoadLibrary? J'ai vu quelques fonctions à ce sujet, mais ils sont tous dépréciés.Inno Setup: UnloadDLL ne fonctionne pas lors de la désinstallation
Voici le code:
function Revert(param: String): cardinal;
external '[email protected]{app}\Revert.dll cdecl delayload uninstallonly';
procedure RevertAll();
var
param: String;
dataDirectory: String;
temp: String;
i: Integer;
begin
dataDirectory := ExpandConstant('{commonappdata}\MyAppData');
StringChangeEx(dataDirectory, '\', '\\', True);
param := '{"dataDirectory": "' + dataDirectory + '", "registryPath" : "SOFTWARE\\MyReg\\Key"}';
Revert(param);
temp := ExpandConstant('{app}\Revert.dll');
for i := 0 to 10 do
begin
UnloadDLL(temp);
Sleep(500);
if DeleteFile(temp) then
break;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usUninstall) then
begin
RevertAll();
end
end;
Que signifie 'DeleteFile' retour? –
Renvoie false. – dJonzo
Juste une note de côté: 'StringChangeEx (dataDirectory, '\', '\\', True);' est un peu dangereux. Si "\\" est déjà présent dans 'dataDirectory', le résultat sera" \\\\ "! –