2016-11-22 23 views
0

の既定のパスを定義しています。私のアプリケーションの更新プログラムが以前に保存したインストールパスをDefaultDirNameとして取得できるように、Windowsレジストリを読み込もうとしています。Inno Setup - [code]

私は次のように私は、関数を呼び出す必要があることをどこかで読んだ:問題は、私は機能は以前のものを見つけられない場合には、デフォルトのパスを定義する必要があるということです

DefaultDirName="{code:GetPath}" 

。たとえば、 'C:\ MyPath'などです。だから私はこれをした:

[Code] 
function GetPath(Value: String): String; 
var 
    OrigPath: string; 
begin 
    Result := '{sd}\MyPath'; 
    if RegQueryStringValue(HKCU, 'Software\MyApp', 'PathExec', OrigPath) then 
    Result := OrigPath; 
end; 

これは動作していません。セットアップを実行すると、宛先ダイアログボックスで、「C:\ MyPath」ではなく「C:\ PathOfMySetup \ {sd} \ MyPath」になります。

"MyPath"をシステムドライブに作成するには、最初の "Result:="行で何を書きますか?

ありがとうございました。

+0

アプリケーションのみをインストールする場合は、アプリケーションに「HKCU」レジストリキーがありますか? –

+0

これは最初のResultの目的ではなく、デフォルトとして機能するのでしょうか? RegQueryStringValueがキーを見つけられなかった場合、関数はC:\ MyPathを返してdirダイアログを満たします。 – mehrlich

+0

しかし、 'DefaultDirName'は新規インストールのためのデフォルトインストールパスです。再インストール/アップグレードの場合、値は使用されません(デフォルト)。だからあなたのコードは実際に私には意味をなさない。あなたは単純な 'DefaultDirName = {sd} \ MyPath'で同じ動作をします。 –

答えて

0

パスカルスクリプトの定数は魔法のように拡張されていません。 ExpandConstant functionを使って明示的に展開する必要があります:

Result := ExpandConstant('{sd}\MyPath'); 
+0

ありがとう!!それは問題を解決しました。 – mehrlich