我知道,如何将带有ISSkin 附加组件的皮肤应用到 Inno Setup 的安装程序部分,但我不知道如何对 Inno Setup 卸载程序执行相同的操作。
如何将带有ISSkin 附加组件的皮肤也应用到卸载程序?
我知道,如何将带有ISSkin 附加组件的皮肤应用到 Inno Setup 的安装程序部分,但我不知道如何对 Inno Setup 卸载程序执行相同的操作。
如何将带有ISSkin 附加组件的皮肤也应用到卸载程序?
除非您的用户运行卸载程序,否则您必须将库与皮肤文件一起提取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;