アンインストーラを起動するのではなく、インストーラを起動するときにエラーが発生していると仮定します。
インストーラが起動すると、{app}
はまだ明らかになりません。
しかし、あなたは{app}
を知っている唯一のアンインストーラのインポートを、必要として、あなたはuninstallonly
optionを追加することができます。
procedure uLoadVCLStyle(VClStyleFile: String);
external '[email protected]{app}\VclStylesInno.dll stdcall uninstallonly';
アンインストーラがDLLを削除するだろうとして、それは本当に、助けにはならないものの、 DLL自体がロックされているので、失敗します。
解決方法は簡単です。公式instructions for uninstalling the VCL Styles for Inno Setupに従ってください。
基本的には、{app}
以外の場所にDLLをインストールし、アンインストールするときはDLLを残す必要があります。これは、実際には、imhoがスタイリッシュなアンインストーラを正当化しない醜い解決策です。しかしそれはあなたの選択です。
あなたは、Windowsの一時フォルダにDLLのコピーそこからそれをロードし、最終的には、一時ディレクトリのクリーンアップ中にDLLを削除するには、Windowsのために期待して、示唆したように。 (より良いが、より実装するのに複雑に)別の解決策について
[Files]
Source: VclStylesinno.dll; DestDir: {app}
[Code]
procedure LoadVCLStyle_UnInstall(VClStyleFile: String);
external '[email protected]{%TEMP}\VclStylesInno.dll stdcall uninstallonly delayload';
function InitializeUninstall: Boolean;
begin
if FileCopy(ExpandConstant('{app}\VclStylesinno.dll'),
ExpandConstant('{%TEMP}\VclStylesinno.dll'), False) then
begin
LoadVCLStyle_UnInstall(...);
end;
end;
、私はこのケースのスーツは私の要件と思いHow keep uninstall files inside uninstaller?
を参照してください:
これは(
delayload
optionに注意)行う必要があります[アンインストール用のInno SetupでVCLスタイルをDLLベースのフォームに適用する方法は? Can not Import dll](http://stackoverflow.com/questions/36745054/how-to-apply-vcl-styles-to-dll-based-forms-in-inno-setup-for-uninstall-cannot-i) –