zoukankan      html  css  js  c++  java
  • IS2010修改XML File

    IS2010修改XML File

    需求:

     通过IS2010中XML Files Change功能,实现动态获取sql登录界面用户输入的值,并且改变web.config文件中的一个<connectionStrings> 节点中

    <add name="iPlat" connectionString="Data Source=.;Initial Catalog=iplat;User ID=sa;Password=" providerName="System.Data.SqlClient"/>、

    <add name="SMS" connectionString="Data Source=.;Initial Catalog=SMS;User ID=sa;Password=" providerName="System.Data.SqlClient"/>” value值。

    思路:

    获取sql登录界面,把值赋给一个变量。然后引用该变量

    环境:IS2010 installscript类型

    具体步骤:

    1. 导入要修改节点。

     

    2.  找到       

    I: <add name="iPlat" connectionString="Data Source=.;Initial Catalog=iplat;User ID=sa;Password=" providerName="System.Data.SqlClient"/>

    II: <add name="SMS" connectionString="Data Source=.;Initial Catalog=SMS;User ID=sa;Password=" providerName="System.Data.SqlClient"/>子节点,将原来

    I中connectionString的valu替换为变量Data Source=<server>;Initial Catalog=iplat;User ID=<sa>;Password=<pw>;,

    II中connectionString的valu替换为变量: Data Source=<server>;Initial Catalog=SMS;User ID=<sa>;Password=<pw>;如下图:

    3.  在installscript的OnSQLServerInitialize中定义相应的字符串变量SERVER,SA,PW,用于获取sql登录界面用户输入值,具体脚本如下:

           

                  SERVER=szServer;

                  SA=szUser;

                  PW=szPassword;

              

    5.最后将变量SERVER,SA,PW;得到的值赋给<server>,<sa>和<pw>,这样就达到了<server>,<sa>和<pw>引用SERVER,SA,PW,赋值给value的目的。具体脚本如下:

       TextSubSetValue ( "<server>", SERVER, TRUE );

       TextSubSetValue ( "<sa>", SA, TRUE );

       TextSubSetValue ( "<pw>", PW, TRUE );

    注:MSI类型工程:可以用函数MsiSetProperty

    最近完成一个项目,耗费了不少时间纠结XML Files Changes功能。发现两年前实现的修改web.config我方法,其实还是存在很多的瑕疵。,故将最近研究几点心得补充如下:

    1.中文字符串的问题

    如果你新建工程的时候,同时选择建立中英文语言(如果只建立英文版,设置完毕后,再选择中文语言,不会存在这个情况),当你将value的常量en 值替换为变量<LANGUAGE_USER_SELECT>时,要留意XML Files Changes中只会在字符串表中将英文版本的en改为 <LANGUAGE_USER_SELECT>,但中文版本字符串依然是"zh" ,所以需要自己手动将中文字符串表改过来。

    可以看到<LANGUAGE_USER_SELECT>在字符串表里对应的是ID_STRING1132

    进入String Editor里查询ID_STRING1132,可以看到只有英文版本被替换成<LANGUAGE_USER_SELECT>,但中文版本仍然保留原始value:zh,所以只要将中文字符串也改成<LANGUAGE_USER_SELECT>就可以了

    2.     web.config文件不要全部导入,只导入需要更改的节点

    不要将整个web.config文件全部导入,只要导入要更改的节点。因为XML Files Changes中无法指定所导入node的顺序,也就是说导入时候在XML Files Changes看到的顺序,跟实际安装完生成的web.config节点的位置可能不同。这个问题当时纠结了很久,后来从帮助里的一句话得到了提醒:

    The XML Files explorer in this view is where you add references to XML files and XML data that you want to create, modify, or remove at run time. Each node represents an XPath expression that your installation carries out at run time to select nodes or node sets in an XML file.

    3.TextSubSetValue赋值位置

    TextSubSetValue赋值的位置要合适,刚开始的时候想应该要等web.config文件拷贝到本机后,才对它里面的节点进行修改。所以一开始是将TextSubSetValue放在OnFirstUIAfter()里面。结果就是修改不成功。后来在网上看到IS官方论坛说一般TextSubSetValue是放在OnFirstUIBefore()里,就琢磨着可能IS内部结构跟我所设想的不一样,所以就将TextSubSetValue赋值移动到OnSQLServerInitialize函数里,没想到真的成功了

    注:MSI类型工程:可以用函数MsiSetProperty

     

     

  • 相关阅读:
    XTREE随笔
    多重共线性
    常用特征选取算法
    最短路径算法的实现(dijskstra):Python
    数据科学的完整学习路径—Python版(转载)
    windows下64位python的安装及机器学习相关包的安装(实用)
    拓扑排序 详解 + 并查集 详解 + 最小生成树(MST)详解 【普利姆算法 + 优先队列优化 & 克鲁斯卡尔算法】
    最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法 详解
    在linux下部署项目所用到的基本linux命令
    素数筛 模板
  • 原文地址:https://www.cnblogs.com/sabrinahuang/p/1932042.html
Copyright © 2011-2022 走看看