2016-03-31 24 views
2

インストーラの一部としていくつかのDLLを登録しようとしています。私はregserverフラグを使用しており、ほとんどのDLLのために完全に動作します。ただし、1つのDLLが登録に失敗します。他のDLLを読み込もうとしますが、現在のディレクトリで見つからなければ失敗します。 regsvr32を{app}ディレクトリから手動で実行するときれいに登録されます。Innoセットアップ:特定の作業ディレクトリでregsvr32を実行します。

regserverフラグの作業ディレクトリを設定する方法はありますか?またはインストーラ全体ですか?

今のところ、私は[Run]エントリ経由でラウンド働いている:

[Run] 
;Register components that are "special" 
Filename: "{sys}\Regsvr32.exe"; Parameters: "/s Awkward.dll"; WorkingDir: "{app}"; StatusMsg: "Registering components ... "; Flags: runhidden; 

しかし、私は、私はまた[UninstallRun]セクションを追加し、unregesterコマンドを追加するべきである疑いがあるとして、これは、理想的ではありません。私はできると思った:

[Files] 
Source: "{#mysrc}\Awkward.dll"; DestDir: "{app}"; Flags: regserver; WorkingDir: "{app}" 

特定のディレクトリから簡単に登録/登録解除する方法はありますか?

答えて

2

できません。 Inno Setupが内部的にDLLを登録するために実行するregsvr32.exeは、システムディレクトリ(通常はC:\Windows\System32)から明示的に実行されます。


回避策が最適です。

ただ、DLLの登録を解除するために同等の[UninstallRun]エントリを追加します。

[UninstallRun] 
Filename: "{sys}\regsvr32.exe"; Parameters: "/u /s Awkward.dll"; WorkingDir: "{app}"; \ 
    Flags: runhidden; 

またはより良い、作業ディレクトリに依存しないDLLを修正。 LoadLibraryExにはLOAD_WITH_ALTERED_SEARCH_PATHフラグを使用できます。

Dynamic-Link Library Search Orderも参照してください。

+0

残念ながら、ワーキングフォルダの問題を抱えているサードパーティのDLLは、修正できません。 :( – Grhm

関連する問題