2011-07-01 40 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元素,将永远被安装在此方案中的组成部分,如果你没有那个键设置为默认值把它放在其他地方。

最好