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)
當然,最後寫好的程式碼,如下所示:
- usingSystem;
- usingSystem.Collections;
- usingSystem.Collections.Generic;
- usingSystem.ComponentModel;
- usingSystem.Configuration.Install;
- usingSystem.Linq;
- usingSystem.Data.SqlClient;
- usingSystem.Windows.Forms;
- usingSystem.IO;
- usingSystem.Security.AccessControl;
- namespaceInstallDB
- {
- [RunInstaller(true)]
- publicpartialclassInstallDB:System.Configuration.Install.Installer
- {
- publicInstallDB()
- {
- InitializeComponent();
- }
- //建立資料庫
- privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf,stringpath)
- {
- SqlConnectionmyConn=newSqlConnection(strSql);
- Stringstr=null;
- try
- {
- str=@"EXECsp_attach_db@dbname='"+DataName+"',@filename1='"+strMdf+"',@filename2='"+strLdf+"'";
- SqlCommandmyCommand=newSqlCommand(str,myConn);
- myConn.Open();
- myCommand.ExecuteNonQuery();
- MessageBox.Show("資料庫安裝成功!點選確定繼續");//需UsingSystem.Windows.Forms
- }
- catch(Exceptione)
- {
- MessageBox.Show("資料庫安裝失敗!"+e.Message+"\n\n"+"您可以手動附加資料");
- System.Diagnostics.Process.Start(path);//開啟安裝目錄
- }
- finally
- {
- myConn.Close();
- }
- }
- //許可權管理
- privatestaticvoidSetFullControl(stringpath)
- {
- FileInfoinfo=newFileInfo(path);
- FileSecurityfs=info.GetAccessControl();
- fs.AddAccessRule(newFileSystemAccessRule("Everyone",FileSystemRights.FullControl,AccessControlType.Allow));
- info.SetAccessControl(fs);
- }
- //過載的Install函式
- publicoverridevoidInstall(System.Collections.IDictionarystateSaver)
- {
- stringserver=this.Context.Parameters["server"];//伺服器名稱
- stringuid=this.Context.Parameters["user"];//SQlServer使用者名稱
- stringpwd=this.Context.Parameters["pwd"];//密碼
- stringpath=this.Context.Parameters["targetdir"];//安裝目錄
- stringch=path.Substring(path.Length-1,1);
- if(ch==@"\")//對路徑進行處理,判斷末尾是否有'\'
- path=path.Substring(0,path.Length-1);//有則刪掉
- stringstrSql="server="+server+";uid="+uid+";pwd="+pwd+";database=master";//連線資料庫字串
- stringDataName=@"StuBoardDB";//資料庫名
- stringstrMdf=path+@"XSJSGLXT.mdf";//MDF檔案路徑,這裡需注意檔名要與剛新增的資料庫檔名一樣!
- SetFullControl(strMdf);//設定許可權為EveryOne
- stringstrLdf=path+@"XSJSGLXT_log.ldf";//LDF檔案路徑
- SetFullControl(strLdf);//設定許可權為EveryOne
- base.Install(stateSaver);
- this.CreateDataBase(strSql,DataName,strMdf,strLdf,path);//開始建立資料庫
- }
- }
- }
可能你看到程式碼比較多,其實這些你都可以重用,你只需要改其中的一點點就行了。如下圖(黑框裡面的東西):你懂得。
好了,最後,生成安裝包。
參考文獻:寬田的部落格園.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