2016-04-29 8 views
2

Inno SetupのアンインストールフォームにVclStylesInno.dllをロードしようとしています。 次のコードは、[Code]セクションの途中で宣言されます。Inno Setupのアンインストールプロセス用に外部DLLをロード

procedure uLoadVCLStyle(VClStyleFile: String); 
    external '[email protected]{app}/VclStylesInno.dll stdcall'; 

が、私はそれが

を初期化前の試みは一定の「アプリ」を展開しました

エラーに直面しました

アンインストールプロセスのDLLをロードする最良の方法は何ですか?

+0

を参照してください:

これは(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) –

答えて

0

アンインストーラを起動するのではなく、インストーラを起動するときにエラーが発生していると仮定します。

インストーラが起動すると、{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?

+0

ExtractTemporaryFile procがUninstallのために機能しない限り、それを一時フォルダに移動するアドバイスを見ましたが、それをどうするかわかりません。 –

+0

ありがとう、マーティン。私はFileCopyを使用しようとしていました。 –

関連する問題