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 に答える