久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于4.5Framework web程序、SQLSERVER數(shù)據(jù)庫打包

 昵稱10504424 2014-09-15
估計很多朋友和我一樣,,對于C/S程序打包很熟悉,,但對于B/S程序打包一頭霧水。,。,。

  最近公司要求我們把項(xiàng)目和數(shù)據(jù)庫(SQLSERVER)一起打包,然后安裝在CD光盤上,,打算拿光盤去客戶那邊實(shí)現(xiàn)一鍵安裝,。哎!??!最終這個任務(wù)給我了,

我只有抱著學(xué)習(xí)的態(tài)度去慢慢摸索,。

  打包的程序是基于VS2012,、MVC4模板開發(fā)出來的,框架是4.5版本,。

  類似于這種4.5框架打包,,目前微軟好像也提供了一個打包工具 InstallShield,下載InstallShield2012 或者InstallShield2013,然后安裝,,安裝完成之后就會

安裝和部署里面會生成一個圖標(biāo)(InstallShield Limited Edition Project), 如下圖(1.1),。。

           

                                  圖(1.1)

 通過雙擊 InstallShield Limited Edition Project這個圖標(biāo),就可以根據(jù)前進(jìn),、后退圖標(biāo)實(shí)現(xiàn)安裝了,,如圖(1.2)

               

                                圖(1.2)

最終WEB打包生成出來的只是一個lnk快捷方式圖標(biāo),無法指定到輸出文件,。然后我用C/S WINFORM程序,、也是基于4.5框架來進(jìn)行打包,發(fā)現(xiàn)安裝生成出來的

文件可以完美運(yùn)行,。

產(chǎn)生這種情況我也感到很無語,,于是在網(wǎng)上查找這方面的相關(guān)資料,,發(fā)現(xiàn)InstallShield這款插件從2010開始,,微軟已經(jīng)不管了,只是推薦這款插件,。

哎?。?!真坑...

基于這種情況我徹底無語了,,只能從新找其他辦法。

之后我就開始嘗試把4.5框架程序降到4.0框架程序,,然后再次進(jìn)行打包,。

降框架有兩種辦法:1.在VS2012上面打開, 更改所有程序集的目標(biāo)框架,,如圖(1.3)

                 

                               如圖(1.3)

       2. 用文本打開項(xiàng)目文件進(jìn)行更改,,更改TargetFrameworkVersion 為v4.0 如圖(1.4)

                   

                                                                                    圖(1.4)

 但是如果在4.5框架程序中引用了4.5版本的包,那也要對包進(jìn)行降版本,。去掉引用的包,,或者找低版本的包來替代高版本的包

下面開始講解用VS2010打包 4.0WEB程序

          1.用VS2010打開即將要打包的WEB程序(圖就省了。,。)

          2.右擊解決方案一>添加一>新建項(xiàng)目,,然后點(diǎn)擊web安裝項(xiàng)目,如圖(1.5)

         

                            圖(1.5)

     3.右擊安裝包WebSetup1一>添加一>項(xiàng)目輸出,,然后選中項(xiàng)目WEB程序集 ,,選中本地化資源、內(nèi)容文件  如圖(1.6),、(1.7)

    

                                                                         圖(1.6)

         

                                                                                圖(1.7)

          4.右擊安裝包一>視圖一>用戶界面  ,,如圖(1.8)

    

                                                                         圖(1.8)

            5.右擊啟動一>添加對話框一>選中文本框、許可協(xié)議,,如圖(1.9)

    

                        圖(1.9)

            6.右擊文本框(A),許可協(xié)議上移到選定的位置,, 如圖(2.0)

    

                    圖(2.0)

      7.新建一個許可協(xié)議文件,打開WORD文檔,里面寫寫協(xié)議內(nèi)容,,保存后WORD文檔要改成rtf格式,,然后右擊許可協(xié)議一>屬性窗口,在LicenseFile屬性中點(diǎn)擊瀏覽,,如圖(2.1)

        

                      如圖(2.1)

         8.雙擊Web應(yīng)用程序文件夾,,添加rtf文件,如圖(2.2)

      

                          圖(2.2)

     9.右擊解決方案一>新建項(xiàng)目一>類庫,,命名為安裝類(我隨便命名的),,右擊安裝類一>添加一>新建類一>安裝程序類,如圖(2.3)

      

                            圖(2.3)

      10.雙擊安裝類一>單擊此處切換到代碼視圖,,如圖(2.4)

      

                          如圖(2.4)

      11.重寫安裝類,,源碼如下

    

復(fù)制代碼
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();
}
/// <summary> /// 重寫安裝方法 /// </summary> /// <param name="stateSaver"></param> 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(); /* * 設(shè)置webconfig連接字符串 */ string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config"); //修改第一個數(shù)據(jù)庫連接 string webcofnigstring2 = File.ReadAllText(webconfigpath).Replace(@"server=JEFFREY9061\SQL2008;database=yd_esms;uid=sa;pwd=********", GetConnectionString2()); File.WriteAllText(webconfigpath, webcofnigstring2); //修改第二個數(shù)據(jù)連接 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); //這個是測試在安裝目錄下添加接收到的用戶填寫的數(shù)據(jù)庫信息 File.WriteAllText(Path.Combine(targetdir, "log.txt"), Server + "/n/r" + dbName + "/n/r" + userName + "/n/r" + userPass); } /// <summary> /// 執(zhí)行sql語句 /// </summary> /// <param name="connection"></param> /// <param name="sql"></param> void ExecuteSQL(SqlConnection connection, string sql) { SqlCommand cmd = new SqlCommand(sql, connection); cmd.ExecuteNonQuery(); } /// <summary> /// 獲取文本框輸入的信息,來插入到登錄連接字符串 /// </summary> /// <returns></returns> 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"]; } } }
復(fù)制代碼

 

    12.安裝類點(diǎn)擊生成,又擊WEB安裝包一>添加一>項(xiàng)目輸出,,選中安裝類為主輸出,,如圖(2.5)

    

                      如圖(2.5)

    13.有擊WEB安裝包一>視圖一>自定義操作,右擊安裝一>添加自定義操作一>雙擊Web應(yīng)用程序文件夾,,選中主輸出來自安裝類(活動),,如圖(2.6)

              

                        如圖(2.6)

      14.依次對WEB程序、安裝類,、安裝包重新生成

      15.右擊安裝包一>打開資源管理文件夾一>debug,在debug文件夾中會存在exe,、msi兩個文件,如圖(2.7)

      

                        如圖(2.7)

     16.雙擊setup.exe 安裝步驟如下

      

 

      

 

 

      

 

 

      

 

 

      

 

 

      

 

 

      

     17.基本上再這里就算結(jié)束了,,后面的我就不用演示了,。

下面講解如何把SQLSERVER數(shù)據(jù)庫和程序一鍵打包,打包數(shù)據(jù)庫其實(shí)很簡單

      分離數(shù)據(jù)庫,,找到對應(yīng)的ldf,、mdf文件進(jìn)行復(fù)制,粘貼到任意盤,,我是放到桌面了,,如圖(3.1)

              

                    圖(3.1)

    

      右擊安裝包一>添加一>文件,把ldf,、mdf文件添加進(jìn)去,,如圖(3.2)

              、  

                圖(3.2)

      打開安裝類,,添加一段代碼,,結(jié)合WEB源碼如下 

復(fù)制代碼
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();
        }

        /// <summary>
        /// 重寫安裝方法
        /// </summary>
        /// <param name="stateSaver"></param>
        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();

            /*
            * 設(shè)置webconfig連接字符串
            */
            string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config");
            //修改第一個數(shù)據(jù)庫連接
            string webcofnigstring2 = File.ReadAllText(webconfigpath).Replace(@"server=JEFFREY9061\SQL2008;database=yd_esms;uid=sa;pwd=********", GetConnectionString2());
            File.WriteAllText(webconfigpath, webcofnigstring2);
            //修改第二個數(shù)據(jù)連接
            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);
            //這個是測試在安裝目錄下添加接收到的用戶填寫的數(shù)據(jù)庫信息
            File.WriteAllText(Path.Combine(targetdir, "log.txt"), Server + "/n/r" + dbName + "/n/r" + userName + "/n/r" + userPass);
            #region 數(shù)據(jù)庫處理
            string strSql = "";
            if (userPass == "")            
            {
                strSql = "server=" + Server + ";database=master;Integrated Security=True";//連接數(shù)據(jù)庫字符串      
            }           
            else             
            {
                strSql = "server=" + Server + ";uid=" + userName + ";pwd=" + userPass + ";database=master";//連接數(shù)據(jù)庫字符串                
            }            
            string DataName = "TEST";//數(shù)據(jù)庫名          
            string strMdf = targetdir + @"TEST.mdf";//MDF文件路徑,這里需注意文件名要與剛添加的數(shù)據(jù)庫文件名一樣,!      
            string strLdf = targetdir + @"TEST_log.ldf";//LDF文件路徑       
            base.Install(stateSaver);
            this.CreateDataBase(strSql, DataName, strMdf, strLdf, targetdir);//開始創(chuàng)建數(shù)據(jù)庫 
            #endregion
        }
        /// <summary>
        /// 執(zhí)行sql語句
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="sql"></param>
        void ExecuteSQL(SqlConnection connection, string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, connection);
            cmd.ExecuteNonQuery();
        }
        /// <summary>
        /// 獲取文本框輸入的信息,來插入到登錄連接字符串
        /// </summary>        
        /// <returns></returns>
        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"];
        }

        /// <summary>   
        /// 附加數(shù)據(jù)庫方法        
        /// </summary>          
        /// <param name="strSql">連接數(shù)據(jù)庫字符串,,連接master系統(tǒng)數(shù)據(jù)庫</param>        
        /// <param name="DataName">數(shù)據(jù)庫名字</param>          
        /// <param name="strMdf">數(shù)據(jù)庫文件MDF的路徑</param>        
        /// <param name="strLdf">數(shù)據(jù)庫文件LDF的路徑</param>        
        /// <param name="path">安裝目錄</param>         
         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("數(shù)據(jù)庫安裝成功,!點(diǎn)擊確定繼續(xù)");
                 //需Using System.Windows.Forms           
             }
             catch (Exception ex)
             {
                 Console.Write(ex.StackTrace.ToString());
                 //MessageBox.Show("數(shù)據(jù)庫安裝失敗,!" + e.Message + "\n\n" + "您可以手動附加數(shù)據(jù)");  
                 System.Diagnostics.Process.Start(path);
                 //打開安裝目錄           
             }
             finally
             {
                 myConn.Close();
             }        
         }
    }
}
復(fù)制代碼

 

  最后把解決方案全部重新生成,,再次重復(fù)上面的WEB打包、安裝就好了,。,。。

  由于空余的時間不是很多,,寫的不是很詳細(xì),,如有不懂的,可以來我QQ群一起討論

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多