9

我知道,如何将带有ISSkin 附加组件的皮肤应用到 Inno Setup 的安装程序部分,但我不知道如何对 Inno Setup 卸载程序执行相同的操作。

如何将带有ISSkin 附加组件的皮肤也应用到卸载程序?

4

1 回答 1

7

除非您的用户运行卸载程序,否则您必须将库与皮肤文件一起提取ISSkin.dll到某个目录并保存它。那是因为卸载程序是由安装程序生成的应用程序,因此它们只是不同(例如卸载程序不包含可以提取的文件)。

您还需要考虑到,如果您希望对整个卸载过程进行蒙皮,则需要ISSkin.dll在卸载过程的最后卸载库,这将需要您删除库手动皮肤文件。为此,我强烈建议您使用与应用程序不同的文件夹,以允许卸载程序正确删除应用程序,其余的由您自己完成。这是一个脚本示例,用于此本地应用程序数据文件夹:

您也可以遵循此代码的注释版本

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output

#define SetupSkinPath "{localappdata}\SetupSkin"

[Files]
Source: ISSkinU.dll; DestDir: {#SetupSkinPath}; Flags: uninsneveruninstall
Source: Styles\Office2007.cjstyles; DestDir: {#SetupSkinPath}; Flags: uninsneveruninstall
[Code]
procedure SetupLoadSkin(lpszPath: string; lpszIniFileName: string);
  external 'LoadSkin@files:ISSkinU.dll stdcall setuponly';
procedure SetupUnloadSkin;
  external 'UnloadSkin@files:ISSkinU.dll stdcall setuponly';
procedure UninstLoadSkin(lpszPath: string; lpszIniFileName: string);
  external 'LoadSkin@{#SetupSkinPath}\ISSkinU.dll stdcall uninstallonly';
procedure UninstUnloadSkin;
  external 'UnloadSkin@{#SetupSkinPath}\ISSkinU.dll stdcall uninstallonly';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
  external 'ShowWindow@user32.dll stdcall';

function InitializeSetup: Boolean;
begin
  Result := True;
  ExtractTemporaryFile('Office2007.cjstyles');
  SetupLoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalBlack.ini');    
end;

procedure DeinitializeSetup;
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), SW_HIDE);
  SetupUnloadSkin;
end;

function InitializeUninstall: Boolean;
begin
  Result := True;
  UninstLoadSkin(ExpandConstant('{#SetupSkinPath}\Office2007.cjstyles'), 
    'NormalBlack.ini');  
end;

procedure DeinitializeUninstall;
begin
  UninstUnloadSkin;
  UnloadDLL(ExpandConstant('{#SetupSkinPath}\ISSkinU.dll'));
  DeleteFile(ExpandConstant('{#SetupSkinPath}\ISSkinU.dll'));
  DeleteFile(ExpandConstant('{#SetupSkinPath}\Office2007.cjstyles'));
  RemoveDir(ExpandConstant('{#SetupSkinPath}'));
end;
于 2013-01-30T01:54:19.607 回答