阅读Installscript中的app.config文件

时间:2010-05-04 05:29:57

标签: installshield-2008

我想知道如何使用installshield es从app.config读取连接字符串,尽管有一个选项可以导入app.config文件XML结构,但问题是连接的部分正在运行时更新。

在升级期间,我需要获取app.config文件的连接字符串部分是否有任何方法可以实现此目的。

由于

1 个答案:

答案 0 :(得分:2)

您可以使用“文本文件更改”功能更新连接字符串。请放置要替换的文本持有者foreach参数。以下是Installshield的帮助:

项目

此信息适用于以下项目类型:

基本MSI InstallScript MSI MSI数据库 转变 此信息不适用于InstallScript项目;但是,InstallScript语言包括用于查找和修改字符串变量和文字的字符串函数。您可以在InstallScript项目中使用这些函数。

您可以使用Windows Installer属性指定要搜索或替换的文本字符串。您还可以使用属性指定搜索中包含或排除的文本文件。

在运行时,Windows Installer使用MsiFormatRecord来解析属性值,并使用该值修改文本文件。这使您可以在运行时修改产品的文本文件时,使用最终用户在对话框中输入的数据,或在运行时确定的其他配置信息。

实施例 以下过程演示了如何让最终用户在安装期间指定必须在运行时写入基于XML的web.config文件的IP地址。 web.config文件随产品一起安装到INSTALLDIR,它包含如下XML:

 

<appSettings> 

    <add key="IP Address" value="default" /> 

</appSettings> 

粗体的默认值必须替换为最终用户输入的IP地址。

请注意,您可以在“文本文件更改”视图中将具有属性的硬编码值替换为以下替换集设置:

包含文件 排除文件 此外,您可以在“文本文件更改”视图中使用属性进行以下替换项设置:

找到什么 用。。。来代替 您在任何这些设置中指定的属性必须括在方括号内,并且属性名称必须全部为大写;例如,[MYPROPERTY]。

该过程的第4步略有不同,具体取决于项目类型,因为Windows Installer控制基本MSI安装的用户界面,而InstallScript引擎控制InstallScript MSI安装的用户界面。

任务

让最终用户指定IP地址:

在“系统配置”下的“视图列表”中,单击“文本文件更改”。 添加并配置替换集项,该项标识要安装其要搜索的文件: 右键单击“文本文件更改”资源管理器,然后单击“添加替换集”。 InstallShield添加新的替换设置项。步骤2b到2d说明如何配置其设置,这些设置显示在右侧窗格中。

在“目标文件夹”设置中,选择[安装目录]目录属性。 在“包含文件”设置中,输入以下内容: web.config

保留其他设置的默认值。 添加并配置替换项,该项标识搜索和替换条件: 在“文本文件更改”资源管理器中,右键单击在步骤2中创建的替换集项目,然后单击“添加替换”。 InstallShield添加了一个新的替换项。步骤3b到3d说明如何配置其设置,这些设置显示在右窗格中。

在“查找内容”设置中,输入以下内容:

在“替换为”设置中,输入以下内容:

保留其他设置的默认值。 在对话框中使用该属性。此过程的这一部分取决于您使用的项目类型。 对于基本的MSI项目: 在“用户界面”下的“视图列表”中,单击“对话框”。 在Dialogs explorer中,展开All Dialogs文件夹,然后单击应包含User Name控件的对话框下的语言。或者,您可以添加新对话框。 将“编辑字段”控件添加到对话框,并将其Property属性设置为以下内容: MYPROPERTY

对于InstallScript MSI项目: 在“行为和逻辑”下的“视图列表”中,单击“InstallScript”。 在OnFirstUIBefore事件中找到应包含User Name控件的对话框中的对话框代码,并添加对Windows Installer API函数MsiSetProperty的调用。例如,如果您希望最终用户在已添加到项目的SdShowDlgEdit1对话框的编辑框中输入IP地址,则应添加MsiSetProperty调用,如以下代码行所示: Dlg_SdShowDlgEdit1:

nResult = SdShowDlgEdit1 (szTitle, szMsg, szField1, svEdit1); 

MsiSetProperty (ISMSI_HANDLE, "MYPROPERTY", svEdit1); 

if (nResult = BACK) goto Dlg_SdWelcome; 

构建您的版本。