当前位置: 首页 > 编程日记 > 正文

安装部署中的数据库打包和快捷方式启动浏览器

前一段时间,因为工作的需要,学习了一些.net的部署。在打包的过程中遇到了几个问题:<?XML:NAMESPACE PREFIX = O />

1、  数据库脚本打包,如何修改Web.config文件中的数据联接

2、  数据库脚本中的方法和视图打包时要注意的问题

3、  如何使创建的快捷方式启动IE浏览器

对于如何打包,建立部署工程,MSDN和网上的一些资料说的很清楚,在这里不再赘述。针对上面两个问题提做一下总结:

1、  首先我们要生成数据库脚本,保存在文件中,如:DBScript.sql。注意:脚本中的“go”要全部去掉,视图和方法不要生成到一起,后面会讲到。

2、  要生成数据库就需要用户SqlServer的用户名密码,这时需要用户自己输入,我们要给用户定义一个输入界面,打开部署项目(比如:我这里叫SetUp)的用户界面,在安装-启动中添加一个用户界面

<?XML:NAMESPACE PREFIX = V />


我选择的是文本框(
A),然后设置此文本框的属性,如下图:


现在只需要输入用户名和密码的两个文本框,注意:有两个属性
STRUSERSTRPASS

3、  有了用户的用户名和密码,我们就可以根据他们生成数据库,这时,要建立一个用户自定义操作,在这个过程中,我们先要建立一个安装类,在项目中添加一个Install类库,添加一个安装程序类,这个类继承自System.Configuration. Install.Installer

定义这个类的目的是加入我们需要的一些步骤,这里我们要加入数据库的建立和修改Web.Config中的数据联接,主要是重写Install方法。

第一步:获得用户输入的用户名和密码

        private string strUser = "";

        private string strPass = "";

public override void Install(IDictionary stateSaver)

        {

            this.strUser = this.Context.Parameters["strUser"];

            if(this.Context.Parameters["strPass"] != null)

                this.strPass = this.Context.Parameters["strPass"];

}

第二步:建立数据库及数据库表

将刚才生成的数据库脚本添加到Install项目下,修改其属性中的生成操作为“嵌入的资源”,编写相应的代码

protected void  AddDBTable(string strDBName )

        {

            try

            {

                //Create the database.

                ExecuteSql("master", "CREATE DATABASE " + strDBName);

                // Create the tables.

                ExecuteSql(strDBName, GetSql("DBScript.sql"));

                ExecuteSql(strDBName, GetSql("Fuction.sql"));

                ExecuteSql(strDBName, GetSql("View.sql"));

            }

            catch(Exception ex)

            {

                throw ex;

            }

}

private void ExecuteSql(string DatabaseName , string Sql)

        {

            SqlConnection sqlConnection1 = new SqlConnection("user id=" + strUser + ";password="+strPass+";database=master;server=(local)") ;

            SqlCommand Command  = new SqlCommand(Sql, sqlConnection1);

            Command.Connection.Open();

            Command.Connection.ChangeDatabase(DatabaseName);

           

            try

            {

                Command.ExecuteNonQuery();

            }

            catch(Exception ex)

            {

                throw ex;

            }

            finally

            {

                Command.Connection.Close();

            }      

        }

        private string  GetSql(string strName)

        {

            try

            {

                Assembly Asm = Assembly.GetExecutingAssembly();

                Stream strm  = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + strName);

                StreamReader reader= new StreamReader(strm);

                return reader.ReadToEnd();

            }

            catch(Exception ex)

            {

                throw ex;

            }                                                              

}

注意:这里有两个执行脚本Fuction.sqlView.sql,对于每一个FuctionView要单独使用一个脚本文件,因为每一个方法或视图的建立要求在查询语句的第一行,如果我们有两个方法的话,就要这样建立,如:要创建Function1Function2。就要建立两个脚本Function1.sqlFunction2.sql分别用来创建Function1Function2。(我没有找到其他的方法解决这个问题,如果大家有更好的方法,欢迎给我指出)

第三步:修改Web.config中的数据联接,我们可以用处理Xml的方式处理Web.config

protected void WriteWebConfig()

        {

            try

            {

                FileInfo file = new FileInfo(this.Context.Parameters["targetdir"] + @"\Web.config");

                XmlDocument doc = new XmlDocument();

                doc.Load(file.FullName);

                XmlElement root = doc.DocumentElement;

                XmlNodeList list = root.SelectNodes("/configuration/appSettings/add");

                foreach(XmlNode node in list)

                {

                    if(node.Attributes["key"].Value == "DBConn")

                    {

                        node.Attributes["value"].Value = "workstation id=.;packet size=4096;user id=" + strUser + ";pwd=" + strPass + ";data source=.;persist security info=False;initial catalog=DB";

                        doc.Save(file.FullName);

                        break;

                    }

                }

            }

            catch(Exception ex)

            {

                throw ex;

            }

}

这里要注意一个问题——对于部署后的Web.config的位置的确定,在这里用到了一个属性“targetdir”,这个属性会在一会的添加自定义操作中定义。

第四步:有了生成数据库及数据库表和对Xml数据联接的方法,我们只要在Install方法中调用就可以了。Install方法代码如下:

public override void Install(IDictionary stateSaver)

        {

            this.strUser = this.Context.Parameters["strUser"];

            if(this.Context.Parameters["strPass"] != null)

                this.strPass = this.Context.Parameters["strPass"];

            this.AddDBTable("ExamTool");

            this.WriteWebConfig();

}

4、  有了自定义操作类,我们就要把它添加到用户自定义操作中,打开部署项目中的用户自定义操作视图,在安装上添加自定义操作


选择Web应用程序文件夹,添加输出,选择刚才建立的Install类库,选择主输出


点击“确定”,设置添加的自定义操作的属性


注意:CustomActionData是指定要安装程序的自定义数据,这里面设置了三个参数,/strUser=[STRUSER] /strPass=[STRPASS] /targetdir=[TARGETDIR],其中targetdir是需要的部署的目标地址,这些参数以“/”表示开始,以“ ”(空格)隔开。

数据库部署部分基本完成,我们再来看看对于Web程序如何启动IE打开首页。

首先,我们要将IEexe文件引入部署程序,在文件系统视图中添加Program Files文件夹,在此文件夹中添加文件


选择IE的文件,在系统盘下的\Program Files\Internet Explorer\iexplore.exe

创建的快捷方式中设置属性,如下图


Target
设置成iexplore.exeWorkingFolder设置为Program Files文件夹。

这样整个部署程序已基本完成,编译一下就可以了。编译的时候注意,生成的SetUp文件分为Debug版和Release版,Release版本相对较小,而且部署好的程序执行的效率相对较高,建议用这个版本部署。

转载于:https://www.cnblogs.com/wayne-ivan/archive/2006/10/18/532317.html

相关文章:

Windows下安装和配置Redis

下载版本Redis-x64-5.0.14.1.zip。(可能需要开代理)

python练习册 每天一个小程序 第0004题

1 #-*-coding:utf-8-*- 2 __author__ Deen 3 4 题目描述&#xff1a;任一个英文的纯文本文件&#xff0c;统计其中的单词出现的个数。5 参考学习链接&#xff1a;6 re http://www.cnblogs.com/tina-python/p/5508402.html#undefined7 collections http://blog.csdn.…

xxxxxxx

xxxxxxxxxxxxxxxx转载于:https://www.cnblogs.com/pythonClub/p/10054454.html

自学笔记——2.字符串的切片、遍历、查找字符

一、字符串的切片 字符串的部分片段或者子集称为切片操作&#xff0c;所有字符串的切片操作是通过方括号&#xff08;[ ]&#xff09;实现的&#xff0c;语法&#xff1a;[n : m : s] 会返回一个子字符串&#xff0c;从索引值n到n-1之间&#xff0c;以s为步进&#xff0c;即&a…

【EXLIBRIS】随笔记 011

随 笔 记 <十一> 持这种观点的人一个是Dr. Johnson&#xff0c;另一个是西方文化影响更加根深蒂固的Reverend&#xff0c;似乎英文字母&#xff08;Indian-European family&#xff09;那种“抽象的、率意独断”的符号&#xff08;Wai-lim Yip语&#xff09;才是最基本的…

Ubuntu搭建Spark运行环境

前言 因为之前研究的方向是分布式系统&#xff0c;重点放在了Hadoop分布式文件系统上。现如今&#xff0c;社会对机器学习的需求势如破竹。为了调整研究方向&#xff0c;而且不抛弃原本的研究成果&#xff0c;研究反向便从分布式系统转为分布式机器学习算法&#xff08;刚起步&…

hibernate 和 mybatis 的区别

【转载】&#xff1a;JAVA面试中问及HIBERNATE与 MYBATIS的对比&#xff0c;在这里做一下总结转载于:https://www.cnblogs.com/virgosnail/p/10054987.html

VC中基于 Windows 的精确定时

方式一&#xff1a;VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时 间隔&#xff0c;如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer()&#xff0c;并在该函数中添加响应的处理语句&#xff0c;用来…

VMware虚拟机安装之后,打开时找不到启动Centos的界面

#VMware虚拟机安装之后&#xff0c;打开时找不到启动Centos的界面 只要在VMware中打开查看–自定义–库&#xff0c;之后就看到自己已经创建好的虚拟机系统 我也是因为自己不小心上次关机之前把左边那个窗口关闭了

service iptables status无法执行,报错

1. service iptables status 结果为edirecting to /bin/systemctl stop iptables.service Failed to stop iptables.service: Unit iptables.service not load 3.安装Iptables-services 在root 用户下&#xff0c;执行指令 yum installl iptables-services3.设置开机启动 …

Qt5的cmake文件位置

D:\APICenter\Qt\Qt5.8.0\5.8\msvc2015\lib\cmake\Qt5\Qt5Config.cmake转载于:https://www.cnblogs.com/coolbear/p/7149079.html

2018-12-2

博客第一天&#xff0c;今天申请通过&#xff0c;我以为我上个星期就已经申请通过了。没想到博客还得申请一下&#xff0c;哈哈&#xff0c;今天终于成功了&#xff0c;加油哦转载于:https://www.cnblogs.com/h-wei/p/10056227.html

重载、重写和隐藏

重载、重写和隐藏 重载、重写和隐藏是很容易混淆的类似概念。虽然所有这三种技术都使您得以创建同名的成员&#xff0c;但它们之间有一些重要的差异。 重载的成员用于提供属性或方法的不同版本&#xff0c;这些版本具有相同名称但是接受不同数量的参数或者接受不同数据类型的参…

[整理] - Relational Engine之UMS Internals

SQL Server 6.5使用Windows的调度处理管理多线程&#xff0c;和其它Windows应用程序一样&#xff0c;它使用Windows标准API&#xff0c;没有用到任何隐藏API&#xff0c;这使得 SQL Server的工作线程同其它多线程Windows程序完全一样&#xff0c;没有任何特殊的优先级&#xff…

跟踪workflow instance 状态

场景是这样的: 1.workflowruntime启动了持久化和监听服务 2.workfllowruntime创建多个实例,并启动,一些会长时间延时,一些会中途暂停,会不同的执行状态(业务状态) 3.另有一winform控制台,有个表格,刷新显示每个实例的信息,包括业务状态--比如创建,运行,挂起等 4.通过workflowru…

尝试Java,从入门到Kotlin(上)

之前一直使用C#开发&#xff0c;最近由于眼馋Java生态环境&#xff0c;并借着工作服务化改造的契机&#xff0c;直接将新项目的开发都转到Java上去。积攒些Java开发经验&#xff0c;应该对.NET开发也会有所启发和益处。 从理论上说&#xff0c;Java和C#语言差别不大&#xff0c…

Centos7状态下查看防火墙状态及修改服务端口

查看当前主机监听哪些服务端口 netstat -telunp查看防火墙firewall开放端口 fiewall-cmd --list-ports增加对外开放的端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent扩充)关闭某个端口 firewall-cmd --permanent --remove-port8080/tcp重启防火墙 firewa…

VMWare中CentOS7 设置固定IP且能够访问外网

最近搭建kubernetes集群环境时遇到一个问题&#xff0c;CentOS7在重启后IP发生变化导致集群中etcd服务无法启动后集群环境变得不可用&#xff0c;针对这种情况&#xff0c;必须要对CentOS7设置固定IP且可以访问外网&#xff08;下载镜像用&#xff09;。 首先关闭VMware的DHCP&…

使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件

当后台在进行某些长时间的操作时&#xff0c;如果能在页面上提供一个显示真实进度的进度条&#xff0c;而不是让用户不知情的等待或是从前的那些简单的估计&#xff0c;将是一个非常难得的出彩之处。现在使用ASP.NET Atlas完全有可能做到这些。这篇文章将讨论如何完成这一功能并…

初始化Mysql系统报错,begin failesd--conpilation aborted at scripts........

在编译安装Mysql之后进行初始化&#xff0c;但是出现了报错 初始化mysql scripts/mysql_install_db --basedir/usr/local/mysql --datadir/usr/local/mysql/data --usermysqlBEGIN failed–compilation aborted at scripts/mysql_install_db line 42 从报错的结果中看出Can…

asp.net Core多环境读取Json

IHostingEnviroment 获取环境相关洗洗 IsDevelopment()、IsStaging()、IsProduction() 分别为:开发、准生产、生产环境 IsEnviroment("Uat") 自定义环境,比如自定义Uat环境 新建: appsettings.Uat.json文件 {"Enviroment": "Uat" }Controller文件…

Microsoft Anti-Cross Site Scripting Library V1.5 发布了

Microsoft Anti-Cross Site Scripting Library V1.5 发布了 微软反跨站攻击脚本库 v1.5。此下载包含Microsoft Application Security Anti-Cross Site Scripting Library的分发组件.Anti-Cross Site Scripting Library可以为网站开发人员提供基于Web应用防护,以抵御源自 Cross-…

nodejs高版本转低版本

需要安装 第一步: npm install --save-dev babel-register npm install --save-dev babel-polyfill //由于只安装babel-register,无法解决低版本问题所以需要这个 npm install --save-dev babel-preset-latest //高版本到低版本js的一条路需要指定babelrc 最后需要创建文件: .b…

替换不文明词语和非法字符

//替换不文明词语和非法字符stringStrReplaceSk(stringcheckstr){ string repstr""; if(Application["repstr"] ! null) { repstr Application["repstr"].ToString(); } else { Uri myUri new Uri("http:…

BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)

题意 题目链接 Sol 线性基是可以合并的 倍增维护一下 然后就做完了&#xff1f;&#xff1f; 喵喵喵&#xff1f; // luogu-judger-enable-o2 #include<bits/stdc.h> #define LL long long using namespace std; const int MAXN 2e4 10, B 60; inline LL read() {cha…

centos7给MySQL配置环境变量

centos7给MySQL配置环境变量 配置好了环境变量&#xff0c;就可以不用每次想要使用mysql时都要到/usr/local/mysql/bin&#xff0c;所以需要配置以下环境变量 编辑配置文件&#xff0c;加入环境变量 Vi /etc/profile在文件后面加上环境变量 export PATH$PATH:/usr/local/mys…

SQL2000联机丛书:使用和维护数据仓库

本次摘录 来源于SQL2000联机丛书中 创建和使用数据仓库概述为的是对数据仓库有个概观的认识使用数据仓库SQL 查询 --------- 最终用户很少使用结构化查询语言 (SQL) 查询直接访问数据仓库数据。 分析 SQL 查询很复杂&#xff0c;必须具有数据库专…

activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

注&#xff1a;&#xff08;1&#xff09;环境搭建&#xff1a;activiti自己定义流程之Spring整合activiti-modeler5.16实例&#xff08;一&#xff09;&#xff1a;环境搭建&#xff08;2&#xff09;创建流程模型&#xff1a;activiti自己定义流程之Spring整合activiti-model…

[rails] 我的订餐系统 -- 小试ruby on rails(转)

前言 近期在java社区中一种新的脚本语言ruby,及用ruby开发的一个wab框架 rails也热闹了起来.引起了不少的java开发人员的关注&#xff0e; 本人平时还是很少接触脚本语言方面东东,看到相关的评论例如: "习惯约定优于配置" -- 那样就用象java那样麻烦且繁杂…

DateReader,DateAdapter,DateSet和SqlCommand的基本使用方法

1usingSystem;2usingSystem.Data;3usingSystem.Data.SqlClient;45namespaceDemo36{ 7 /**//// <summary> 8 /// Class1 的摘要说明。 9 /// </summary>10 class Class111 {12 /**//// <summary>13 /// 应用程序的主入口点。14 /// </summary>15 [S…