C# winform程序怎么打包成安裝項目(圖解)


C# winform程序怎么打包成安裝項目(圖解)

開發環境:VS2010+SQL Server 2008

操作系統:win7_32bit 旗艦版

開發語言:C#

項目名稱:學生寄宿管理系統

 

下面開始介紹:如何給windows應用程序打包?

 

第一步:

打開VS2010,打開你要打包的項目,然后右擊"解決方案",”添加“,"新建項目",彈出如下圖所示界面:

點擊”安裝和部署“左邊的三角形,選擇下面的”Visual studio Installer“,再選擇”安裝項目“,同時將下面的命名改為”Setup“點擊確定。

 

 

第二步:

點擊解決方案里面生成的”Setup“,將屬性中的ProtectName改為”學生寄宿系統 V1.0 “(你的項目名字)

 

 

第三步:

右擊解決方案里面的”Setup“,然后再選擇”屬性“。彈出屬性頁界面如下第二張圖:

再點擊里面的系統必備。

重要一點:勾選"從與我的應用程序相同的位置下載系統必備組件(D)",其實意思就是說你勾選后,生成安裝項目時,在你安裝項目的路徑下,會有你在系統必備組件列表中勾選的組件.(系統自動完成,這一點還不錯,不需要你自己去下載組件)

 

1)、Windows Installer 3.1(必選)

2)、.NET Framework 3.5 (可選)參考最后說明

3)、Crystal Report Basic for Visual Studio2008(x86,x64) (可選) 項目中用到了水晶報表就需要勾選此項

 

 

 

第四步:

右擊”應用程序文件夾“,點擊”添加“,再點擊文件夾,命名為”DB“(可隨意)用於存放你的數據庫文件。

然后再右擊剛才添加好的"DB"文件夾,”添加“,”文件“,將你的數據庫添加進來。

 

 

第五步:

右擊”應用程序文件夾“,點擊”添加“,點擊”文件“。將你的Release目錄下面的文件全部添加進來。

 

 

第六步:

右擊”應用程序文件夾“,點擊”添加“,選擇”項目輸出...“,注意:在項目欄要選擇你自己的項目(我的項目名:StudentJisu),然后選擇”主輸出“,點擊確定。

 

 

第七步:

創建桌面快捷方式,右擊剛才添加的”主輸出“,然后選擇第一個”創建快捷方式“,然后你可以將快捷方式重新命名(我重新命名為:學生寄宿管理系統)

最后,鼠標左鍵點住快捷方式,然后拖放到”用戶桌面“文件夾下面。

 

 

第八步:

創建卸載程序。右擊”應用程序文件夾“,點擊”添加“,選擇”文件“,然后將"C:\Windows\System32" 下面的”msiexec.exe“文件給添加進來,如果找不到,你可以直接搜。當然,你也可以再給msiexec.exe創建一個快捷方式命名為”UnInstall“。

命名了快捷方式之后,將Setup屬性(點擊解決方案里面的setup彈出屬性)ProductCode拷貝到Uninstall屬性的Arguments里面:

同時在前頭加上 ”/X “,注意:x后面有一個空格。

 

 

第九步:

改變桌面快捷方式的Logo。自帶的logo實在是太挫了,你可以去網上下載一個圖片,然后轉換為.ico格式。

下圖中”應用程序文件夾“是指logo存放的位置,一般存在在該處就行了。

 

 

第十步:

附加數據庫。我們現在添加一個類,用於編寫附加數據庫代碼。

右擊”解決方案“,點擊”添加“,選擇”新建項目“,然后新建一個C#類庫,並命名為”InstallDB“。

最后,將”class1.cs“刪掉。

 

 

第十一步:

新建一個類,用於寫數據庫附加到 數據庫管理系統中的 代碼。右擊剛新建的那個”InstallDB“,點擊”添加“,選擇”新建項“。

然后在彈出的界面中,選擇”安裝程序類“,並命名為”InstallDB.cs“。

 

 

第十二步:

由於附加數據庫需要用戶輸入本機數據庫的一些信息,比如:服務器名稱,數據庫管理員名稱和密碼等等。這時候,我們可以在安裝過程中彈出一個等待用戶輸入的框:

右擊”Setup“,點擊”視圖“,選擇”用戶界面“。彈出如下第二個界面,再右擊”啟動“,點擊“添加對話框”,選擇”文本框(A)“,同時將其拖放到”歡迎使用“下面,如下第三張圖。

最后,根據自己的需要填寫”文本框(A)“的屬性,可以參考第三張圖。

注:里面定義的變量,主要是為了下面的附加代碼而定義的。

 

 

第十三步:

添加 附加數據庫的 主輸出。右擊”setup“,選擇”視圖“,”自定義操作“。

然后,右擊”安裝“,選擇”應用程序文件夾“,選擇安裝程序類”InstallDB“,還是選擇”主輸出“,確定。

接着,在CostomActionData里面復制粘貼如下:

 

[sql]  view plain  copy
 
 
 
 在CODE上查看代碼片派生到我的代碼片
  1. <span style="font-family:Comic Sans MS;">/dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]\"</span>  

 

 

 

 

第十四步:

在InstallDB.cs中編寫附加數據庫代碼。先點擊”單機此處切換到代碼視圖“。

然后添加 幾個 命名空間。

當然,要使用MessageBox()函數,需要添加using System.Windows.Forms;之外,同時需要添加System.Windows.Forms引用(具體操作:右擊InstallDB,選擇添加引用,選擇.NET)

當然,最后寫好的代碼,如下所示:

  1.  
    using System;
  2.  
    using System.Collections;
  3.  
    using System.Collections.Generic;
  4.  
    using System.ComponentModel;
  5.  
    using System.Configuration.Install;
  6.  
    using System.Linq;
  7.  
    using System.Data.SqlClient;
  8.  
    using System.Windows.Forms;
  9.  
    using System.IO;
  10.  
    using System.Security.AccessControl;
  11.  
     
  12.  
    namespace InstallDB
  13.  
    {
  14.  
    [ RunInstaller(true)]
  15.  
    public partial class InstallDB : System.Configuration.Install.Installer
  16.  
    {
  17.  
    public InstallDB()
  18.  
    {
  19.  
    InitializeComponent();
  20.  
    }
  21.  
    //創建數據庫
  22.  
    private void CreateDataBase(string strSql, string DataName, string strMdf, string strLdf, string path)
  23.  
    {
  24.  
    SqlConnection myConn = new SqlConnection(strSql);
  25.  
    String str = null;
  26.  
    try
  27.  
    {
  28.  
    str = @" EXEC sp_attach_db @dbname='" + DataName + "',@filename1='" + strMdf + "',@filename2='" + strLdf + "'";
  29.  
    SqlCommand myCommand = new SqlCommand(str, myConn);
  30.  
    myConn.Open();
  31.  
    myCommand.ExecuteNonQuery();
  32.  
    MessageBox.Show( "數據庫安裝成功!點擊確定繼續");//需Using System.Windows.Forms
  33.  
    }
  34.  
    catch (Exception e)
  35.  
    {
  36.  
    MessageBox.Show( "數據庫安裝失敗!" + e.Message + "\n\n" + "您可以手動附加數據");
  37.  
    System.Diagnostics.Process.Start(path); //打開安裝目錄
  38.  
    }
  39.  
    finally
  40.  
    {
  41.  
    myConn.Close();
  42.  
    }
  43.  
    }
  44.  
    //權限管理
  45.  
    private static void SetFullControl(string path)
  46.  
    {
  47.  
    FileInfo info = new FileInfo(path);
  48.  
    FileSecurity fs = info.GetAccessControl();
  49.  
    fs.AddAccessRule( new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
  50.  
    info.SetAccessControl(fs);
  51.  
    }
  52.  
    //重載的Install函數
  53.  
    public override void Install(System.Collections.IDictionary stateSaver)
  54.  
    {
  55.  
    string server = this.Context.Parameters["server"];//服務器名稱
  56.  
    string uid = this.Context.Parameters["user"];//SQlServer用戶名
  57.  
    string pwd = this.Context.Parameters["pwd"];//密碼
  58.  
    string path = this.Context.Parameters["targetdir"];//安裝目錄
  59.  
    string ch = path.Substring(path.Length - 1, 1);
  60.  
    if (ch == @"\") //對路徑進行處理,判斷末尾是否有'\'
  61.  
    path = path.Substring( 0, path.Length - 1);//有則刪掉
  62.  
     
  63.  
    string strSql = "server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master";//連接數據庫字符串
  64.  
    string DataName = @"StuBoardDB";//數據庫名
  65.  
    string strMdf = path + @"XSJSGLXT.mdf";//MDF文件路徑,這里需注意文件名要與剛添加的數據庫文件名一樣!
  66.  
    SetFullControl(strMdf); //設置權限為EveryOne
  67.  
    string strLdf = path + @"XSJSGLXT_log.ldf";//LDF文件路徑
  68.  
    SetFullControl(strLdf); //設置權限為EveryOne
  69.  
    base.Install(stateSaver);
  70.  
    this.CreateDataBase(strSql, DataName, strMdf, strLdf, path);//開始創建數據庫
  71.  
    }
  72.  
    }
  73.  
    }


可能你看到代碼比較多,其實這些你都可以重用,你只需要改其中的一點點就行了。如下圖(黑框里面的東西):你懂得。

 

 

第十五步:

好了,最后,生成安裝包。

 

 

參考文獻:寬田的博客園.c# winform 打包(帶數據庫安裝)[CP/OL].http://www.cnblogs.com/scottckt/archive/2011/05/14/2046313.html,2011-05-14/2014-07-08

邢海芳的CSDN博客.VS2010 C/S模式winForm打包部署.詳細![CP/OL].http://blog.csdn.net/xhf55555/article/details/7702212,2012-06-29/2014-07-08


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM