使用INNO设置在卸载时删除DLL的问题

时间:2011-03-10 13:55:28

标签: dll inno-setup uninstall

我正在使用GameuxInstallHelper.dll在安装游戏资源管理器时注册我的游戏。

但是由于某些原因,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;

知道为什么在XP操作系统上没有删除dll,我怎么能删除它? 我在卸载dll之后尝试了DeleteFile函数,我还试图创建另一个函数来搜索特定的dll,但没有任何帮助我解决问题。 并且dll没有被使用,因为手动操作系统让我删除它。

1 个答案:

答案 0 :(得分:1)

你应该在“not CheckXPOs”阻止之后卸载dll。

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

另一种方法是在声明从GameuxInstallHelper.dll加载的所有函数中添加"delayload"选项