2012-08-08 31 views
2

我的程序應該安裝到記錄在註冊表中的路徑。如果找不到註冊表項,請安裝到另一個(默認)路徑。WiX - 如果註冊表搜索失敗,我如何安裝到備用路徑

例如,我想有這樣的:

<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. 
+1

參見如何根據條件設置屬性這樣的回答:http://stackoverflow.com/questions/1690162/ wix-set-a-property-based-a-condition – BryanJ 2012-08-08 20:17:56

回答

4

˚F ROM內存下面的例子應該工作。如果搜索沒有找到任何值,則該屬性將獲得默認值。如果搜索成功,它只會被覆蓋。

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

謝謝,它正在完美運作 – Deqing 2012-08-09 13:26:22

+0

我剛剛遇到了您的解決方案問題。剛剛編輯我的問題,你能幫忙看看嗎?謝謝! – Deqing 2012-08-15 05:27:31

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> 
相關問題