视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于4.5Frameworkweb程序、SQLSERVER数据库打包
2020-11-09 07:30:34 责编:小采
文档


估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水。。 最近公司要求我们把项目和数据库(SQLSERVER)一起打包,然后安装在CD光盘上,打算拿光盘去客户那边实现一键安装。哎!!!最终这个任务给我了, 我只有抱着学习的态度去慢慢摸

  估计很多朋友和我一样,对于C/S程序打包很熟悉,但对于B/S程序打包一头雾水。。

  最近公司要求我们把项目和数据库(SQLSERVER)一起打包,然后安装在CD光盘上,打算拿光盘去客户那边实现一键安装。哎!!!最终这个任务给我了,

我只有抱着学习的态度去慢慢摸索。

  打包的程序是基于VS2012、MVC4模板开发出来的,框架是4.5版本。

  类似于这种4.5框架打包,目前微软好像也提供了一个打包工具 InstallShield,下载InstallShield2012 或者InstallShield2013,然后安装,安装完成之后就会

在 安装和部署里面会生成一个图标(InstallShield Limited Edition Project), 如下图(1.1)。

                                  图(1.1)

通过双击 InstallShield Limited Edition Project这个图标,就可以根据前进、后退图标实现安装了,如图(1.2)

                                图(1.2)

最终WEB打包生成出来的只是一个lnk快捷方式图标,无法指定到输出文件。然后我用C/S WINFORM程序、也是基于4.5框架来进行打包,发现安装生成出来的

文件可以完美运行。

产生这种情况我也感到很无语,于是在网上查找这方面的相关资料,发现InstallShield这款插件从2010开始,微软已经不管了,只是推荐这款插件。

哎!!!真坑...

基于这种情况我彻底无语了,只能从新找其他办法。

之后我就开始尝试把4.5框架程序降到4.0框架程序,然后再次进行打包。

降框架有两种办法:1.在VS2012上面打开, 更改所有程序集的目标框架,如图(1.3)

                               如图(1.3)

       2. 用文本打开项目文件进行更改,更改TargetFrameworkVersion 为v4.0 如图(1.4)

     

图(1.4)

但是如果在4.5框架程序中引用了4.5版本的包,那也要对包进行降版本。去掉引用的包,或者找低版本的包来替代高版本的包

下面开始讲解用VS2010打包 4.0WEB程序

1.用VS2010打开即将要打包的WEB程序(图就省了。)

2.右击解决方案一>添加一>新建项目,然后点击web安装项目,如图(1.5)

                            图(1.5)

   3.右击安装包WebSetup1一>添加一>项目输出,然后选中项目WEB程序集 ,选中本地化资源、内容文件 如图(1.6)、(1.7)

    

图(1.6)

图(1.7)

4.右击安装包一>视图一>用户界面 ,如图(1.8)

    

图(1.8)

5.右击启动一>添加对话框一>选中文本框、许可协议,如图(1.9)

    

                        图(1.9)

6.右击文本框(A),许可协议上移到选定的位置, 如图(2.0)

    

                    图(2.0)

      7.新建一个许可协议文件,打开WORD文档,里面写写协议内容,保存后WORD文档要改成rtf格式,然后右击许可协议一>属性窗口,在LicenseFile属性中点击浏览,如图(2.1)

        

                      如图(2.1)

  8.双击Web应用程序文件夹,添加rtf文件,如图(2.2)

      

                          图(2.2)

     9.右击解决方案一>新建项目一>类库,命名为安装类(我随便命名的),右击安装类一>添加一>新建类一>安装程序类,如图(2.3)

      

                            图(2.3)

    10.双击安装类一>单击此处切换到代码视图,如图(2.4)

      

                          如图(2.4)

      11.重写安装类,源码如下

    

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Data.SqlClient;
using System.IO;
using System.Linq;


namespace 安装类
{
 [RunInstaller(true)]
 public partial class Installer : System.Configuration.Install.Installer
 {
 public Installer()
 {
 InitializeComponent();
} /// /// 重写安装方法 /// /// public override void Install(IDictionary stateSaver) { base.Install(stateSaver); string Server = Context.Parameters["server"].ToString(); string dbName = Context.Parameters["dbname"].ToString(); string userName = Context.Parameters["user"].ToString(); string userPass = Context.Parameters["pwd"].ToString(); string targetdir = Context.Parameters["targetdir"].ToString(); /* * 设置webconfig连接字符串 */ string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config"); //修改第一个数据库连接 string webcofnigstring2 = File.ReadAllText(webconfigpath).Replace(@"server=JEFFREY9061\SQL2008;database=yd_esms;uid=sa;pwd=********", GetConnectionString2()); File.WriteAllText(webconfigpath, webcofnigstring2); //修改第二个数据连接 string webcofnigstring = File.ReadAllText(webconfigpath).Replace(@"Data Source=JEFFREY9061\SQL2008;Initial Catalog=yd_esms;Persist Security Info=True;User ID=sa;Password=******", GetConnectionString()); File.WriteAllText(webconfigpath, webcofnigstring); //这个是测试在安装目录下添加接收到的用户填写的数据库信息 File.WriteAllText(Path.Combine(targetdir, "log.txt"), Server + "/n/r" + dbName + "/n/r" + userName + "/n/r" + userPass); } /// /// 执行sql语句 /// /// /// void ExecuteSQL(SqlConnection connection, string sql) { SqlCommand cmd = new SqlCommand(sql, connection); cmd.ExecuteNonQuery(); } /// /// 获取文本框输入的信息,来插入到登录连接字符串 /// /// private string GetConnectionString() { return @"Data Source=" + this.Context.Parameters["server"] + ";Initial Catalog=" + this.Context.Parameters["dbname"] + ";Persist Security Info=True;User ID=" + this.Context.Parameters["user"] + ";Password=" + this.Context.Parameters["pwd"] + ""; } private string GetConnectionString2() { return @"server=" + this.Context.Parameters["server"] + ";database=" + this.Context.Parameters["dbname"] + ";uid=" + this.Context.Parameters["user"] + ";pwd=" + this.Context.Parameters["pwd"]; } } }

    12.安装类点击生成,又击WEB安装包一>添加一>项目输出,选中安装类为主输出,如图(2.5)

    

                      如图(2.5)

    13.有击WEB安装包一>视图一>自定义操作,右击安装一>添加自定义操作一>双击Web应用程序文件夹,选中主输出来自安装类(活动),如图(2.6)

              

                        如图(2.6)

      14.依次对WEB程序、安装类、安装包重新生成

      15.右击安装包一>打开资源管理文件夹一>debug,在debug文件夹中会存在exe、msi两个文件,如图(2.7)

      

                        如图(2.7)

     16.双击setup.exe 安装步骤如下

      

      

      

      

      

      

      

     17.基本上再这里就算结束了,后面的我就不用演示了。

下面讲解如何把SQLSERVER数据库和程序一键打包,打包数据库其实很简单

      分离数据库,找到对应的ldf、mdf文件进行复制,粘贴到任意盘,我是放到桌面了,如图(3.1)

              

                    图(3.1)

    

      右击安装包一>添加一>文件,把ldf、mdf文件添加进去,如图(3.2)

              、  

                图(3.2)

      打开安装类,添加一段代码,结合WEB源码如下 

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Data.SqlClient;
using System.IO;
using System.Linq;


namespace 安装类
{
 [RunInstaller(true)]
 public partial class Installer : System.Configuration.Install.Installer
 {
 public Installer()
 {
 InitializeComponent();
 }

 /// 
 /// 重写安装方法
 /// 
 /// 
 public override void Install(IDictionary stateSaver)
 {
 base.Install(stateSaver);
 string Server = Context.Parameters["server"].ToString();
 string dbName = Context.Parameters["dbname"].ToString();
 string userName = Context.Parameters["user"].ToString();
 string userPass = Context.Parameters["pwd"].ToString();
 string targetdir = Context.Parameters["targetdir"].ToString();

 /*
 * 设置webconfig连接字符串
 */
 string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config");
 //修改第一个数据库连接
 string webcofnigstring2 = File.ReadAllText(webconfigpath).Replace(@"server=JEFFREY9061\SQL2008;database=yd_esms;uid=sa;pwd=********", GetConnectionString2());
 File.WriteAllText(webconfigpath, webcofnigstring2);
 //修改第二个数据连接
 string webcofnigstring = File.ReadAllText(webconfigpath).Replace(@"Data Source=JEFFREY9061\SQL2008;Initial Catalog=yd_esms;Persist Security Info=True;User ID=sa;Password=******", GetConnectionString());
 File.WriteAllText(webconfigpath, webcofnigstring);
 //这个是测试在安装目录下添加接收到的用户填写的数据库信息
 File.WriteAllText(Path.Combine(targetdir, "log.txt"), Server + "/n/r" + dbName + "/n/r" + userName + "/n/r" + userPass);
 #region 数据库处理
 string strSql = "";
 if (userPass == "") 
 {
 strSql = "server=" + Server + ";database=master;Integrated Security=True";//连接数据库字符串 
 } 
 else 
 {
 strSql = "server=" + Server + ";uid=" + userName + ";pwd=" + userPass + ";database=master";//连接数据库字符串 
 } 
 string DataName = "TEST";//数据库名 
 string strMdf = targetdir + @"TEST.mdf";//MDF文件路径,这里需注意文件名要与刚添加的数据库文件名一样! 
 string strLdf = targetdir + @"TEST_log.ldf";//LDF文件路径 
 base.Install(stateSaver);
 this.CreateDataBase(strSql, DataName, strMdf, strLdf, targetdir);//开始创建数据库 
 #endregion
 }
 /// 
 /// 执行sql语句
 /// 
 /// 
 /// 
 void ExecuteSQL(SqlConnection connection, string sql)
 {
 SqlCommand cmd = new SqlCommand(sql, connection);
 cmd.ExecuteNonQuery();
 }
 /// 
 /// 获取文本框输入的信息,来插入到登录连接字符串
 ///  
 /// 
 private string GetConnectionString()
 {
 return @"Data Source=" + this.Context.Parameters["server"] + ";Initial Catalog=" + this.Context.Parameters["dbname"] + ";Persist Security Info=True;User ID=" + this.Context.Parameters["user"] + ";Password=" + this.Context.Parameters["pwd"] + "";
 }
 private string GetConnectionString2()
 {
 return @"server=" + this.Context.Parameters["server"] + ";database=" + this.Context.Parameters["dbname"] + ";uid=" + this.Context.Parameters["user"] + ";pwd=" + this.Context.Parameters["pwd"];
 }

 ///  
 /// 附加数据库方法 
 ///  
 /// 连接数据库字符串,连接master系统数据库 
 /// 数据库名字 
 /// 数据库文件MDF的路径 
 /// 数据库文件LDF的路径 
 /// 安装目录 
 private void CreateDataBase(string strSql, string DataName, string strMdf, string strLdf, string path) 
 { 
 SqlConnection myConn = new SqlConnection(strSql); 
 String str = null; 
 try
 {
 str = " EXEC sp_attach_db @dbname='" + DataName + "',@filename1='" + strMdf + "',@filename2='" + strLdf +
 "'";
 SqlCommand myCommand = new SqlCommand(str, myConn);
 myConn.Open();
 myCommand.ExecuteNonQuery();
 //MessageBox.Show("数据库安装成功!点击确定继续");
 //需Using System.Windows.Forms 
 }
 catch (Exception ex)
 {
 Console.Write(ex.StackTrace.ToString());
 //MessageBox.Show("数据库安装失败!" + e.Message + "\n\n" + "您可以手动附加数据"); 
 System.Diagnostics.Process.Start(path);
 //打开安装目录 
 }
 finally
 {
 myConn.Close();
 } 
 }
 }
}

  最后把解决方案全部重新生成,再次重复上面的WEB打包、安装就好了。。

 由于空余的时间不是很多,写的不是很详细,如有不懂的,可以来我QQ群一起讨论

 QQ群号: 8017417 身份认证:Rach技术讨论

http://www.cnblogs.com/hank-hu/p/3967101.html

  

下载本文
显示全文
专题