0

安装程序在安装我的服务期间将 SQL Server 的名称写入注册表。我创建了一个对话框窗口,可以edit控制用户在哪里输入 servername 。现在我想用 ChangeMode 中的注册表值填充这个控件。如果此注册表项为空,则填充一些默认名称。怎么可能解决呢?我试图将RegistrySearch节点放入Control节点。但在我看来它不起作用..任何帮助表示赞赏

PS在这里查看了一些信息: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。

我做错了什么?

4

3 回答 3

2

RegistrySearch放入一个Property中,并将该属性绑定到Control

于 2011-07-01T12:49:33.610 回答
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>
于 2011-07-02T12:27:01.730 回答
0

我不知道您为什么要使用两个属性,如果您使用 registrySearch 设置属性 CONNSEARCH,它将检查注册表并将在那里找到的值(如果存在)分配给它。这发生在 AppSearch 阶段,远在大多数 UI 发生之前,您的编辑框就在那里。因此,您也不需要使用 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 元素放在将始终安装在这种情况下的组件中,如果您没有在其他任何地方设置它,则将该键设置为默认值.

最好的

于 2013-08-02T13:58:18.370 回答