2011-07-01 39 views
0

在安裝我的服務期間,安裝程序正在將SQL Server的名稱寫入註冊表。 然後我創建了一個對話框,其中edit控制在哪裏用戶將輸入服務器名稱。現在我想用ChangeMode中的註冊表中的值填充此控件。如果此註冊表項爲空以填充某個默認名稱。 如何解決它? 我試圖把RegistrySearch節點放入Control節點。但在我看來,它不工作.. 任何幫助表示讚賞wix - 使用註冊表中的值填充編輯控件

P.S.在這裏看到一些信息:link1。並嘗試代碼如:

<Property Id="SERVCONNSTR" Value=".\SQLEXPRESS">    
     </Property> 
<Property Id="CONNSEARCH"> 
<RegistrySearch Id="servconstr" Root="HKLM" 
    Key="Software\$(var.Manufacturer)\SERVICE" Name="SQL Server" Type="raw"></RegistrySearch> 
</Property> 
<SetProperty Id="SERVCONNSTR" Value="CONNSEARCH" 
    After="AppSearch"><![CDATA[CONNSEARCH AND (!FEATURE1=3 OR !FEATURE2=3 OR !FEATURE3=3)]]></SetProperty> 

但我仍然越來越。\ SQLEXPRESS編輯控制在修改期間。

我做錯了什麼?

回答

0
<Property Id="SERVCONNSTR" Value=".\SQLEXPRESS">    
     </Property> 
<Property Id="CONNSEARCH"> 
<RegistrySearch Id="servconstr" Root="HKLM" 
    Key="Software\$(var.Manufacturer)\SERVICE" Name="SQL Server" Type="raw"></RegistrySearch> 
</Property> 
<SetProperty Id="SERVCONNSTR" Value="[CONNSEARCH]" 
    After="AppSearch">CONNSEARCH</SetProperty> 
0

我不知道爲什麼你使用的兩個屬性,如果設置與registrySearch你的財產CONNSEARCH,它會檢查註冊表,併爲它分配在那裏發現的價值,如果存在。這發生在大多數用戶界面發生之前的AppSearch階段,您的編輯框會出現在這個階段。所以你不需要使用SetProperty。

是否要用默認值填充註冊表項或者使用默認值填充註冊表項?

該屬性只填寫使用註冊表搜索的屬性元素的Value屬性。如上所述,如果在註冊表中找不到任何內容,它將默認。

它看起來像這樣;

<

<Property Id="CONNSEARCH" Value="DefaultValue"> 
<RegistrySearch Id="servconstr" Root="HKLM" 
    Key="Software\$(var.Manufacturer)\SERVICE" Name="SQL Server" Type="raw"></RegistrySearch> 
</Property> 

Appsearch後您的屬性將被設置,如果你的控件綁定到該屬性,它會充滿了這個值。這也將您的默認屬性值設置爲「DefaultValue」如果沒有在註冊表中。

要在註冊表鍵創建一個默認值,我想只是把的RegistryKey/RegistryValue元素,將永遠被安裝在此方案中的組成部分,如果你沒有那個鍵設置爲默認值把它放在其他地方。

最好