在InstallShield中手动修改XML Files Changes

本文介绍了解决InstallShield15在打包ASP.NET网站安装程序时遇到的问题,特别是当数据库密码为空时导致web.config文件中连接字符串丢失的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在忙于打包安装程序,使用的是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=”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值