1. 程式人生 > 其它 >C# winform程式怎麼打包成安裝專案(圖解)

C# winform程式怎麼打包成安裝專案(圖解)

引用網址:https://www.cnblogs.com/-s11900085/p/7244800.html

http://blog.csdn.net/u011981242/article/details/51059441

開發環境: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裡面複製貼上如下:

      <spanstyle=

=[]/pwd=[PWD]/targetdir=</span>

在InstallDB.cs中編寫附加資料庫程式碼。先點選”單機此處切換到程式碼檢視“。

然後新增 幾個 名稱空間。

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

當然,最後寫好的程式碼,如下所示:

  1. usingSystem;
  2. usingSystem.Collections;
  3. usingSystem.Collections.Generic;
  4. usingSystem.ComponentModel;
  5. usingSystem.Configuration.Install;
  6. usingSystem.Linq;
  7. usingSystem.Data.SqlClient;
  8. usingSystem.Windows.Forms;
  9. usingSystem.IO;
  10. usingSystem.Security.AccessControl;
  11. namespaceInstallDB
  12. {
  13. [RunInstaller(true)]
  14. publicpartialclassInstallDB:System.Configuration.Install.Installer
  15. {
  16. publicInstallDB()
  17. {
  18. InitializeComponent();
  19. }
  20. //建立資料庫
  21. privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf,stringpath)
  22. {
  23. SqlConnectionmyConn=newSqlConnection(strSql);
  24. Stringstr=null;
  25. try
  26. {
  27. str=@"EXECsp_attach_db@dbname='"+DataName+"',@filename1='"+strMdf+"',@filename2='"+strLdf+"'";
  28. SqlCommandmyCommand=newSqlCommand(str,myConn);
  29. myConn.Open();
  30. myCommand.ExecuteNonQuery();
  31. MessageBox.Show("資料庫安裝成功!點選確定繼續");//需UsingSystem.Windows.Forms
  32. }
  33. catch(Exceptione)
  34. {
  35. MessageBox.Show("資料庫安裝失敗!"+e.Message+"\n\n"+"您可以手動附加資料");
  36. System.Diagnostics.Process.Start(path);//開啟安裝目錄
  37. }
  38. finally
  39. {
  40. myConn.Close();
  41. }
  42. }
  43. //許可權管理
  44. privatestaticvoidSetFullControl(stringpath)
  45. {
  46. FileInfoinfo=newFileInfo(path);
  47. FileSecurityfs=info.GetAccessControl();
  48. fs.AddAccessRule(newFileSystemAccessRule("Everyone",FileSystemRights.FullControl,AccessControlType.Allow));
  49. info.SetAccessControl(fs);
  50. }
  51. //過載的Install函式
  52. publicoverridevoidInstall(System.Collections.IDictionarystateSaver)
  53. {
  54. stringserver=this.Context.Parameters["server"];//伺服器名稱
  55. stringuid=this.Context.Parameters["user"];//SQlServer使用者名稱
  56. stringpwd=this.Context.Parameters["pwd"];//密碼
  57. stringpath=this.Context.Parameters["targetdir"];//安裝目錄
  58. stringch=path.Substring(path.Length-1,1);
  59. if(ch==@"\")//對路徑進行處理,判斷末尾是否有'\'
  60. path=path.Substring(0,path.Length-1);//有則刪掉
  61. stringstrSql="server="+server+";uid="+uid+";pwd="+pwd+";database=master";//連線資料庫字串
  62. stringDataName=@"StuBoardDB";//資料庫名
  63. stringstrMdf=path+@"XSJSGLXT.mdf";//MDF檔案路徑,這裡需注意檔名要與剛新增的資料庫檔名一樣!
  64. SetFullControl(strMdf);//設定許可權為EveryOne
  65. stringstrLdf=path+@"XSJSGLXT_log.ldf";//LDF檔案路徑
  66. SetFullControl(strLdf);//設定許可權為EveryOne
  67. base.Install(stateSaver);
  68. this.CreateDataBase(strSql,DataName,strMdf,strLdf,path);//開始建立資料庫
  69. }
  70. }
  71. }


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

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

參考文獻:寬田的部落格園.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