亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.net打包自動安裝數據庫

2019-11-18 19:11:27
字體:
來源:轉載
供稿:網友

一).創建部署項目
1. 在“文件”菜單上指向“添加項目”,然后選擇“新建項目”。
2. 在“添加新項目”對話框中,選擇“項目類型”窗格中的“安裝和部署項目”,然后選擇“模板”窗格中的“安裝項目”。在“名稱”框中鍵入 setup1。
3. 單擊“確定”關閉對話框。
4. 項目被添加到解決方案資源管理器中,并且文件系統編輯器打開。
5. 在“屬性”窗口中,選擇 PRoductName 屬性,并鍵入 信息管理系統 。
 
二).將 主程序 項目的輸出添加到部署項目中
1. 在“文件系統編輯器”中,選擇“應用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項目輸出”。
2. 在“添加項目輸出組”對話框中,選擇“項目”下拉列表中的“你的程序”。
3. 單擊“確定”關閉對話框。
4. 從列表中選擇“主輸出”和“內容文件”組,然后單擊“確定”。
 
三).創建安裝程序類
1. 在“文件”菜單上指向“新建”,然后選擇“項目”。
2. 在“新建項目”對話框中,選擇“項目類型”窗格中的“Visual Basic 項目”,然后選擇“模板”窗格中的“類庫”。在“名稱”框中鍵入 installDB。
3. 單擊“打開”關閉對話框。
4. 從“項目”菜單中選擇“添加新項”。
5. 在“添加新項”對話框中選擇“安裝程序類”。在“名稱”框中鍵入 installDB。
6. 單擊“確定”關閉對話框。
7. 詳細代碼附后。
 
四).創建自定義安裝對話框
1. 在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。
2. 在用戶界面編輯器中,選擇“安裝”下的“啟動”節點。在“操作”菜單上,選擇“添加對話框”。
3. 在“添加對話框”對話框中,選擇“許可協議”對話框,然后單擊“確定”關閉對話框。
4. 在“添加對話框”對話框中,選擇“文本框 (A)”對話框,然后單擊“確定”關閉對話框。
5. 在“操作”菜單上,選擇“上移”。重復此步驟,直到“文本框 (A)”對話框位于“安裝文件夾”節點之上。
6. 在“屬性”窗口中,選擇 BannerText 屬性并鍵入:安裝數據庫.
7. 選擇 BodyText 屬性并鍵入:安裝程序將在目標機器上安裝數據庫
8. 選擇 Edit1Label 屬性并鍵入:數據庫名稱:
9. 選擇 Edit1Property 屬性并鍵入 CUSTOMTEXTA1
10. 選擇 Edit1Value 屬性并鍵入:dbservers
11. 選擇 Edit2Label 屬性并鍵入:服務器名:
12. 選擇 Edit2Property 屬性并鍵入 CUSTOMTEXTA2
13. 選擇 Edit2Value 屬性并鍵入:(local)
14. 選擇 Edit3Label 屬性并鍵入:用戶名:
15. 選擇 Edit3Value 屬性并鍵入:sa
16. 選擇 Edit3Property 屬性并鍵入 CUSTOMTEXTA3
17. 選擇 Edit4Label 屬性并鍵入:密碼:
18. 選擇 Edit4Property 屬性并鍵入 CUSTOMTEXTA4
19. 選擇 Edit2Visible、Edit3Visible 和 Edit4Visible 屬性,并將它們設置為 true
 
五).創建自定義操作
1. 在解決方案資源管理器中選擇“setup1”項目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。
2. 在自定義操作編輯器中選擇“安裝”節點。在“操作”菜單上,選擇“添加自定義操作”。
3. 在“選擇項目中的項”對話框中,雙擊“應用程序文件夾”。
4. 選擇“主輸出來自 installDB(活動)”項,然后單擊“確定”關閉對話框。
5. 在“屬性”窗口中,選擇 CustomActionData 屬性并鍵入“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]/"”。
 
附:/targetdir="[TARGETDIR]/"是安裝后的目標路徑,為了在installDB類中獲得安裝后的路徑,我們設置此參數。
六).打包時加入卸載功能:
方法一:
1.在打包項目中添加文件msiexec.exe(一般可在c:/windows/system32/下找到)
2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸載".
3.更改此快捷方式的Arguments 為"/x {產品id}",產品id的值為打包項目的ProductCode屬性值.
方法二:(推薦)
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標簽,不是右鍵中的屬性),下面要用到
2.用VS.net建立一個新的控制臺程序uninst.exe文件
'power by: landlordh
'for 2000,xp,2003
Module uninstall
    Sub Main()
        Dim myProcess As Process = New Process
        If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
            myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")  '改為自己的ProductCode
        End If
        myProcess.Close()
    End Sub
End Module
3.將控制臺程序BIN目錄的exe文件加入到打包程序文件中,在程序組創建uninst.exe的快捷方式
installdb.vb類,要添加引用 system.configuration.install.dll :

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Reflection;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace install
{
 /// <summary>
 /// Installer1 的摘要說明。
 /// </summary>
 [RunInstaller(true)]
 public class Installer1 : System.Configuration.Install.Installer
 {
  /// <summary>
  /// 必需的設計器變量。
  /// </summary>
  private System.ComponentModel.Container components = null;
  public Installer1()
  {
   // 該調用是設計器所必需的。
   InitializeComponent();
   // TODO: 在 InitializeComponent 調用后添加任何初始化
  }
  /// <summary>
  /// 清理所有正在使用的資源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if(components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region 組件設計器生成的代碼
  /// <summary>
  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
  /// 此方法的內容。
  /// </summary>
  private void InitializeComponent()
  {
   components = new System.ComponentModel.Container();
  }
  #endregion
  private  string GetSql(string Name) 
  { 
//   //調用osql執行腳本
//
//   System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
//
//   sqlProcess.StartInfo.FileName = "osql.exe";
//
//   sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
//
//   sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//
//   sqlProcess.Start();
//
//   sqlProcess.WaitForExit() ;//等待執行
//
//   sqlProcess.Close();
   try 
   { 
//    Assembly Asm = Assembly.GetExecutingAssembly();
//    System.IO.FileInfo FileInfo = new System.IO.FileInfo(Asm.Location);
//    string path=FileInfo.DirectoryName+@"/"+Name;
    string path=this.Context.Parameters["targetdir"]+Name;
    FileStream fs=new FileStream(path,FileMode.Open,Fileaccess.Read,FileShare.Read);
    StreamReader reader = new StreamReader(fs,System.Text.Encoding.Default); 
    //System.Text.Encoding.ASCII;
    return reader.ReadToEnd(); 
   } 
   catch (Exception ex) 
   { 
    Console.Write("In GetSql:"+ex.Message); 
    throw ex; 
   } 
  } 
  private void ExecuteSql(string DataBaseName,string Sql) 
  {
   SqlConnection sqlConnection1=new SqlConnection();
   sqlConnection1.ConnectionString =string.Format("server={0}; user id={1}; passWord={2}; Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
   System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1); 
   try 
   {
    Command.Connection.Open(); 
    Command.Connection.ChangeDatabase(DataBaseName); 
   
    Command.ExecuteNonQuery(); 
   } 
   catch(Exception ex) 
   { 
    Console.Write("In exception handler :"+ex.Message); 
   }
   finally 
   { 
    Command.Connection.Close(); 
   } 
  } 

  protected void AddDBTable(string strDBName) 
  { 
   try 
   {     
    ExecuteSql("master","CREATE DATABASE "+ strDBName);
    ExecuteSql(strDBName,GetSql("sql.txt")); 
    ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");
    ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
    ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");
   } 
   catch(Exception ex) 
   { 
    Console.Write("In exception handler :"+ex.Message); 
   } 
  } 
  public override void Install(System.Collections.IDictionary stateSaver) 
  { 
   base.Install(stateSaver); 
   AddDBTable(this.Context.Parameters["dbname"]); 
  } 
 }
}
這里有個sql.txt是數據庫的sql腳本,當然可以調用osql來執行sql腳本,其實是一樣的。
打包的時候必須把sql.txt文件加進來,否則不會執行。
如果你想附加數據庫的mdf文件和ldf文件,用下面這段程序:
private void CreateDataBase(string strSql,string DataName,string strMdf,string strLdf)
  {
   String str;
   SqlConnection myConn = new SqlConnection (strSql);
   //EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//需要先將數據庫分離出來
   str = "EXEC sp_attach_db @dbname = '"+ DataName +"', @filename1 = '"+ strMdf +"',@filename2='"+strLdf+"'";
   SqlCommand myCommand = new SqlCommand(str, myConn);
  
    myConn.Open();
    myCommand.ExecuteNonQuery();
    myConn.Close();
  
  }
當然打包的時候也要把這兩個數據庫文件也加進來。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av电影中文字幕| 中文字幕欧美日韩精品| 日韩国产激情在线| 久久成人人人人精品欧| 成人精品aaaa网站| 夜夜嗨av色一区二区不卡| 国产精品亚洲美女av网站| 亚洲欧美福利视频| 欧美另类第一页| 日韩欧美在线视频观看| 九九热精品视频| 久久成人亚洲精品| 国产精品视频色| 欧美日韩国产精品| 国产丝袜高跟一区| 在线日韩第一页| 国产mv久久久| 欧美中文字幕在线播放| 久久99热这里只有精品国产| 欧美国产日韩视频| 清纯唯美日韩制服另类| 日韩成人激情在线| 欧美国产精品人人做人人爱| 中文字幕欧美视频在线| 久久99久久99精品中文字幕| 国产69精品久久久久久| 国产女人精品视频| 国产精品成人一区二区三区吃奶| 亚洲成人av片在线观看| 久久久久亚洲精品成人网小说| 日韩av在线网| 久久黄色av网站| 欧美日韩爱爱视频| 日本久久亚洲电影| 日韩毛片中文字幕| 国产精品观看在线亚洲人成网| 91网站免费观看| 色综合久久天天综线观看| 2019中文字幕免费视频| 国产一级揄自揄精品视频| 97成人精品视频在线观看| 日韩成人小视频| 国产精品久久久久久av福利软件| 中文字幕亚洲综合久久筱田步美| 91久久久久久久一区二区| 欧美高清电影在线看| 亚洲一区第一页| 日韩美女免费观看| 欧美极品在线播放| 精品成人69xx.xyz| 国产精品视频在线观看| 深夜福利国产精品| 北条麻妃99精品青青久久| 久久男人av资源网站| 久久精品国产亚洲一区二区| 国产福利精品av综合导导航| 国产a∨精品一区二区三区不卡| 亚洲97在线观看| 欧美极品少妇xxxxx| 国产日韩在线免费| 久久久久久久久久久免费| 亚洲成人av片在线观看| 欧美极品少妇与黑人| 欧美性xxxx极品hd欧美风情| 国产精品福利在线观看| 国产一区二区三区在线观看视频| 久久精品人人做人人爽| 亚洲无亚洲人成网站77777| 亚洲人成网站免费播放| 欧美专区在线视频| 91免费精品国偷自产在线| 伊人av综合网| 久久精品视频在线观看| 久久久精品2019中文字幕神马| 久久影院资源网| 欧美成人在线免费| 97成人精品视频在线观看| 91av在线国产| 久久免费国产精品1| 日韩av123| 国产精品6699| 久久成人精品视频| 欧洲午夜精品久久久| 日韩欧美一区视频| 欧美有码在线视频| 成人性生交大片免费看视频直播| 91九色单男在线观看| 日韩美女视频免费在线观看| 97视频网站入口| 久久成人精品电影| 欧美激情精品久久久久久蜜臀| 久久精品国产亚洲精品| 另类专区欧美制服同性| 成人在线激情视频| 97色在线观看免费视频| 成人免费观看a| 蜜臀久久99精品久久久无需会员| 欧美电影免费观看网站| 国产精品免费视频久久久| 国产日韩中文字幕| 欧美一级视频免费在线观看| 日本精品va在线观看| 91久热免费在线视频| 91久久精品国产91性色| 成人天堂噜噜噜| 国产精品白丝av嫩草影院| 国产亚洲成av人片在线观看桃| 欧美性猛交xxxxx免费看| 亚洲www永久成人夜色| 国产精品专区一| 国产精品久久色| 日韩av在线免费看| 日韩动漫免费观看电视剧高清| 亚洲第五色综合网| 成人免费视频在线观看超级碰| 久久精品亚洲一区| 黑人巨大精品欧美一区二区一视频| 久久免费在线观看| 亚洲欧洲午夜一线一品| 久久综合亚洲社区| 日韩亚洲欧美中文高清在线| 91精品久久久久久久久久久| 久久久久久这里只有精品| 欧美美最猛性xxxxxx| 欧美精品xxx| 欧美日韩国产在线播放| 懂色aⅴ精品一区二区三区蜜月| 欧美激情一级二级| 日本电影亚洲天堂| 久久亚洲国产精品| 日本成人激情视频| 亚洲性日韩精品一区二区| 亚洲人成毛片在线播放| 午夜精品国产精品大乳美女| 中文字幕日韩高清| 911国产网站尤物在线观看| 久久中文字幕国产| 国产精品久久久一区| 尤物99国产成人精品视频| 麻豆精品精华液| 欧美精品亚州精品| 亚洲欧美另类人妖| 亚洲国产成人精品电影| 日韩av在线天堂网| 毛片精品免费在线观看| 亚洲国产欧美日韩精品| 欧美大全免费观看电视剧大泉洋| 亚洲伊人久久综合| 日本高清+成人网在线观看| 日韩的一区二区| 欧美大片在线免费观看| 久久天天躁狠狠躁夜夜av| 亚洲bt欧美bt日本bt| 91香蕉嫩草神马影院在线观看| 日韩av网站电影| 久久久久久国产精品| 亚洲视频网站在线观看| 97人人做人人爱| 欧美性猛交xxxx久久久| 国产一区二区三区在线免费观看| 91久久国产综合久久91精品网站| 4444欧美成人kkkk| 日韩电影中文字幕一区| 97在线观看视频|