2

私のプログラムは、レジストリに記録されているパスにインストールされているはずです。レジストリキーが見つからない場合は、別の(デフォルトの)パスにインストールします。

たとえば、次のようなものが必要です。

<Property Id="MYINSTALLDIR">
    <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
    if not found, then set "MYINSTALLDIR" to "D:\working\defaultApps"
</Property>    

これを実現するには、wxsファイルをどのように作成すればよいですか?

編集:

現在の問題は次のとおりです。

if not found in registry, then set "MYINSTALLDIR" to LocalAppDataFolder 

私は試した

<Property Id="MYINSTALLDIR" Value="LocalAppDataFolder">
    <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>

しかし、エラーが返されました:

Error 1606. Could not access network location LocalAppDataFolder.
4

2 に答える 2

6

さて、私はついにそれを行う方法を理解しました。

を使用Custom Actionすると、デフォルト値を別のプロパティに設定できるようになります。

<Property Id="MYINSTALLDIR">
    <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>

<CustomAction Id="UserInstallDir" Property="InstallDir" Value="[INSTALLDIRCU]" Execute="immediate" />
<CustomAction Id="UserInstallDirDefault" Property="InstallDir" Value="[LocalAppDataFolder]" Execute="immediate" />

<InstallExecuteSequence>
    <Custom Action="UserInstallDir" After="AppSearch">MYINSTALLDIR</Custom>      
    <Custom Action="UserInstallDirDefault" After="AppSearch">NOT MYINSTALLDIR</Custom>      
</InstallExecuteSequence>
于 2012-08-15T06:23:34.873 に答える
4

メモリから、以下の例が機能するはずです。検索に値が見つからない場合、プロパティはデフォルト値を取得します。検索が成功した場合にのみ上書きされます。

<Property Id="MYINSTALLDIR" Value="Default Property Value">
    <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>
于 2012-08-09T00:06:00.217 に答える