Проблемы при удалении DLL при удалении с помощью установки INNO - PullRequest
0 голосов
/ 10 марта 2011

Я использую GameuxInstallHelper.dll, чтобы зарегистрировать свою игру при установке в Games Explorer.

Но по некоторым причинам DLL остается в папке моего приложения после удаления, но только на Win XP.На Win 7 и Vista все файлы удаляются.

Используемый код:

function CheckXPOs(): Boolean;
begin
  if GetWindowsVersion shr 24 < 6 then Result:=TRUE
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  mres : integer;
begin
  if CurUninstallStep = usUninstall then
    begin
      #ifdef AddToGameExplorer
      if not CheckXPOs then
        begin
          RetrieveGUIDForApplication(ExpandConstant('{app}'+GE_resource), GUID);
          RemoveFromGameExplorer(GUID);
          RemoveTasks(GUID);
          UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
        end;
      #endif
    end;
    case CurUninstallStep of
    usPostUninstall:
      begin
        mres := MsgBox(ExpandConstant('{cm:removemsg}'), mbConfirmation, MB_YESNO)
          if mres = IDYES then
            DelTree(ExpandConstant('{app}'), True, True, True);
      end;
     end;
end;

Любая идея, почему DLL не удаляется в операционных системах XP и как я могу удалить его?Я пробовал функцию DeleteFile после выгрузки dll, я также пытался создать другую функцию для поиска этой конкретной dll, но ничего не помогло мне решить проблему.И dll не используется, потому что вручную ОС позволяет мне удалить его.

1 Ответ

1 голос
/ 16 марта 2011

Вы должны выгружать dll после блока «not CheckXPOs».

if not CheckXPOs then
begin
  RetrieveGUIDForApplication(ExpandConstant('{app}'+GE_resource), GUID);
  RemoveFromGameExplorer(GUID);
  RemoveTasks(GUID);
end;
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));

Другим способом является добавление опции "delayload" в объявлении всех функций, загруженных из GameuxInstallHelper.dll

...