在InstallShield中手动修改XML Files Changes

最近在忙于打包安装程序,使用的是InstallShield 15,打包过程遇到了一个小问题(怀疑是InstallShield 15 的bug),却耗了我一个晚上的时间才把这个问题解决。

使用InstallShield创建用于搭建ASP.NET网站的安装程序时,需要对web.config里的属性值作一些改变,比如Connection String,需要改成:

Data Source=[IS_SQLSERVER_SERVER];DataBase=[IS_SQLSERVER_DATABASE];uid=[IS_SQLSERVER_USERNAME];pwd=[IS_SQLSERVER_PASSWORD]

其中IS_SQLSERVER_SERVER、IS_SQLSERVER_DATABASE、IS_SQLSERVER_USERNAME、IS_SQLSERVER_PASSWORD是安装过程中用户输入的Property值。为了实现web.config的改变,可以使用InstallShield里的XML Files Changes,但是我发现了一个问题,按照数据库默认值,用户名是sa,密码是空,如果直接将上面所说的Connection String直接填到Attribute为connectionString的Value中时,由于IS_SQLSERVER_PASSWORD是空值,最终的安装结果,在web.config里的是:connectionString=””,全变空了?但如果不加上“pwd=[IS_SQLSERVER_PASSWORD]”时却一切正常,也就是说,由于Property为空时,会导致整个Value都变为空。我怀疑是InstallShield 15的一个bug。

最后的解决方案如下:

第一步:

在Property Manager中新建一个Property:[CONNECTION_STRING],并在XML Files Changes里添加web.config,在configuration->connectionStrings-> add[@connectionString="Data Source=;DataBase=;uid=sa;pwd=" and @name="DBStr"]里,添加一项,Attribute:connectionString,Value为刚才创建的Property:[CONNECTION_STRING]

第二步:

在InstallScript中添加脚本:

function ChangeProperty(hMSI)
    STRING svConStr,svServer,svDBName,svUID,svPWD;
    NUMBER nRet;
begin
    nRet=128;
    MsiGetProperty(hMSI,"IS_SQLSERVER_SERVER",svServer,nRet);
    MsiGetProperty(hMSI,"IS_SQLSERVER_DATABASE",svDBName,nRet);
    MsiGetProperty(hMSI,"IS_SQLSERVER_USERNAME",svUID,nRet);
    MsiGetProperty(hMSI,"IS_SQLSERVER_PASSWORD",svPWD,nRet);
    svConStr="Data Source="+svServer+";DataBase="+svDBName+";uid="+svUID+";pwd="+svPWD;
    MsiSetProperty(hMSI,"CONNECTION_STRING",svConStr);
end;

第三步:

在Custom Actions and Sequences中添加新的Action,比如叫做SetConnetionString,Function Name为ChangeProperty,并将其执行顺序设置为After InstallInitialize。

最后一切大功告成!经实验,结果connectionString的值正是预期的那样,如:connectionString=” Data Source=SQLSERVER;DataBase=DB;uid=sa;pwd=”

时间: 2024-09-09 15:05:22

在InstallShield中手动修改XML Files Changes的相关文章

关于修改xml 文件中数值的问题

问题描述 关于修改xml 文件中数值的问题 10C 请问大神:如何修改xml文件中的数值为其一半,即 25,30,35.方法不限,最好有具体可执行的代码. #别的代码< void property=""exp""> < int>50 < /void> #别的代码< void property=""exp""> < int>60 < /void> #别的代码

使用qt5操作xml文件,删除xml文件中的节点和修改xml文件节点的数据值

问题描述 使用qt5操作xml文件,删除xml文件中的节点和修改xml文件节点的数据值 使用qt5操作xml文件,删除xml文件中的节点和修改xml文件中节点的数据值. 那位大神知道,如果有代码就更好了. 谢谢 解决方案 QT XML文件 修改节点修改XML文件的节点属性值

手动修改/etc/shadow和/etc/passwd中的用户密码

1.手动修改/etc/shadow中的用户密码 /etc/shadow文件 第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起:这个字段是非空的: 第二字段:密码(已被加密),这个字段是非空的: 第三字段:上次修改口令的时间:这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的

java中有个图片链接,我想将链接放入xml中方便修改

问题描述 java中有个图片链接,我想将链接放入xml中方便修改 我是初学者,不是很懂xml 我现在做了个对图片链接(File fileOne = new File("E:1.jpg");)合成的java程序 我想将图片链接放到xml中来读取 我改如何配置xml,和对java代码修改 感谢! 解决方案 jdom xml 解决方案二: 新建xml文件放到本项目目录下,在网页中使用js通过ajax获取xml文件,然后进行解析,得到url字段后,利用js找到该节点,再将link属性更改为该u

bat命令修改xml文件中某个参数的值

问题描述 bat命令修改xml文件中某个参数的值 用的下面的方法 set filename=C:UsersAdministratorDesktopccms_install_x86_windows_s1.0.3conftest2.xml set oldstr=pylGLZ set newstr=C:UsersAdministratorDesktopccms_install_x86_windows_s1.0.3upload setlocal enabledelayedexpansion for /f

installshield中怎么自定义安装界面,修改安装界面图片

问题描述 installshield中怎么自定义安装界面,修改安装界面图片 解决方案 InstallShield自定义安装界面InstallShield自定义安装界面InstallShield自定义安装界面

ASP.NET中读取修改删除XML文件一些示例

ASP.NET读取XML文件4种方法分析,需要的朋友可以参考下. 方法一 :使用XML控件 代码如下:  代码如下 复制代码 <% @ Page Language="C#"%> <html> <body> <h3><font face="Verdana">读取XML方法一</font></h3> <from runat=server> <asp:Xml id=&qu

xml-winform C# 修改XML文件

问题描述 winform C# 修改XML文件 在winform中form中的文本框中修改都取的XML文件,修改后,保存时判断修改后的XML是否符合XML基本的格式规范,最后一步的判断如何实现呢? namespace ManageXMLFile { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string path; private void Form1_Load(object sen

AS3中新的XML处理方法 - E4X

xml 今天我们来看看AS3中新的XML处理方法:E4X,直到现在,ECMA脚本语言规范(ECMA-262)--AscriptScript 3.0的核心基础,并没有提供任何的XML数据处理类或方法.AcriontScript之前的版本(从Flash 5中的ActionScript开始)有一些处理XML数据的类和方法,但是它们并不是基于ECMAScript标准的. 新的ECMA脚本语言规范第4版草稿中定义了一系列新的处理XML数据的类和方法.这些类和方法的集合并命名为E4X("ECMAScript