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;