C#写的windows应用程序打包
話不多說開始
第一步:
打開VS2010,打開你要打包的項目,然后右擊"解決方案",”添加“,"新建項目",彈出如下圖所示界面:
點擊”安裝和部署“左邊的三角形,選擇下面的”Visual studio Installer“,再選擇”安裝項目“,同時將下面的命名改為”Setup“點擊確定。
?
?
第二步:
點擊解決方案里面生成的”Setup“,將屬性中的ProtectName改為你的項目名字
?
第三步:
右擊解決方案里面的”Setup“,然后再選擇”屬性“。彈出屬性頁界面如下第二張圖:
再點擊里面的系統必備。
重要一點:勾選"從與我的應用程序相同的位置下載系統必備組件(D)",其實意思就是說你勾選后,生成安裝項目時,在你安裝項目的路徑下,會有你在系統必備組件列表中勾選的組件.(系統自動完成,這一點還不錯,不需要你自己去下載組件)
1)、Windows Installer 3.1(必選)
2)、.NET Framework 3.5 (可選)參考最后說明
3)、Crystal Report Basic for Visual Studio2008(x86,x64) (可選) 項目中用到了水晶報表就需要勾選此項
?
?
?
?
?
第四步:(沒有數據庫或使用SQLite的可以忽略這一步)
右擊”應用程序文件夾“,點擊”添加“,文件再點擊文件夾,命名為”DB“(可隨意)用于存放你的數據庫文件。
然后再右擊剛才添加好的"DB"文件夾,”添加“,”文件“,將你的數據庫添加進來。
第五步:
右擊”應用程序文件夾“,點擊”添加“,點擊”文件“。將你的Release或者Debug目錄下面的文件全部添加進來。
第六步:
右擊”應用程序文件夾“,點擊”添加“,選擇”項目輸出...“,注意:在項目欄要選擇你自己的項目(我的項目名:StudentJisu),然后選擇”主輸出“,點擊確定。
第七步:
創建桌面快捷方式,右擊剛才添加的”主輸出“,然后選擇第一個”創建快捷方式“,然后你可以將快捷方式重新命名(我重新命名為:學生寄宿管理系統)
最后,鼠標左鍵點住快捷方式,然后拖放到”用戶桌面“文件夾下面。
第八步:
創建卸載程序。右擊”應用程序文件夾“,點擊”添加“,選擇”文件“,然后將"C:\Windows\System32" 下面的”msiexec.exe“文件給添加進來,如果找不到,你可以直接搜。當然,你也可以再給msiexec.exe創建一個快捷方式命名為”UnInstall“。
命名了快捷方式之后,將Setup屬性(點擊解決方案里面的setup彈出屬性)ProductCode拷貝到Uninstall屬性的Arguments里面:
同時在前頭加上 ”/X “,注意:x后面有一個空格。
第九步:
改變桌面快捷方式的Logo。自帶的logo實在是太挫了,你可以去網上下載一個圖片,然后轉換為.ico格式。
下圖中”應用程序文件夾“是指logo存放的位置,一般存在在該處就行了。
第十步:(沒有數據庫或者使用SQLite的到第九步就全部結束了 后面直接到最后一步生成就完事了~)
附加數據庫。我們現在添加一個類,用于編寫附加數據庫代碼。
右擊”解決方案“,點擊”添加“,選擇”新建項目“,然后新建一個C#類庫,并命名為”InstallDB“。
最后,將”class1.cs“刪掉。
第十一步:
新建一個類,用于寫數據庫附加到 數據庫管理系統中的 代碼。右擊剛新建的那個”InstallDB“,點擊”添加“,選擇”新建項“。
然后在彈出的界面中,選擇”安裝程序類“,并命名為”InstallDB.cs“。
第十二步:
由于附加數據庫需要用戶輸入本機數據庫的一些信息,比如:服務器名稱,數據庫管理員名稱和密碼等等。這時候,我們可以在安裝過程中彈出一個等待用戶輸入的框:
右擊”Setup“,點擊”視圖“,選擇”用戶界面“。彈出如下第二個界面,再右擊”啟動“,點擊“添加對話框”,選擇”文本框(A)“,同時將其拖放到”歡迎使用“下面,如下第三張圖。
最后,根據自己的需要填寫”文本框(A)“的屬性,可以參考第三張圖。
注:里面定義的變量,主要是為了下面的附加代碼而定義的。
第十三步:
添加 附加數據庫的 主輸出。右擊”setup“,選擇”視圖“,”自定義操作“。
然后,右擊”安裝“,選擇”應用程序文件夾“,選擇安裝程序類”InstallDB“,還是選擇”主輸出“,確定。
接著,在CostomActionData里面復制粘貼如下:
?| 1 | /dbname=[DBNAME] /server=[SERVER] /user=[USER] /pwd=[PWD] /targetdir="[TARGETDIR]\"? |
第十四步:
在InstallDB.cs中編寫附加數據庫代碼。先點擊”單機此處切換到代碼視圖“。
然后添加 幾個 命名空間。
當然,要使用MessageBox()函數,需要添加using System.Windows.Forms;之外,同時需要添加System.Windows.Forms引用(具體操作:右擊InstallDB,選擇添加引用,選擇.NET)
當然,最后寫好的代碼,如下所示:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Linq; using System.Data.SqlClient; using System.Windows.Forms; using System.IO; using System.Security.AccessControl; namespace InstallDB { ????[RunInstaller(true)] ????public?partial?class InstallDB : System.Configuration.Install.Installer ????{ ????????public?InstallDB() ????????{ ????????????InitializeComponent(); ????????} ????????//創建數據庫 ????????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("數據庫安裝成功!點擊確定繼續");//需Using System.Windows.Forms ????????????} ????????????catch (Exception e) ????????????{ ????????????????MessageBox.Show("數據庫安裝失敗!"?+ e.Message +?"\n\n"?+?"您可以手動附加數據"); ????????????????System.Diagnostics.Process.Start(path);//打開安裝目錄 ????????????} ????????????finally ????????????{ ????????????????myConn.Close(); ????????????} ????????} ????????//權限管理 ????????private?static?void SetFullControl(string path) ????????{ ????????????FileInfo info = new FileInfo(path); ????????????FileSecurity fs = info.GetAccessControl(); ????????????fs.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); ????????????info.SetAccessControl(fs); ????????} ????????//重載的Install函數 ????????public?override void Install(System.Collections.IDictionary stateSaver) ????????{ ????????????string server = this.Context.Parameters["server"];//服務器名稱 ????????????string uid = this.Context.Parameters["user"];//SQlServer用戶名 ????????????string pwd = this.Context.Parameters["pwd"];//密碼 ????????????string path = this.Context.Parameters["targetdir"];//安裝目錄 ????????????string ch = path.Substring(path.Length - 1, 1); ????????????if (ch == @"\")?? //對路徑進行處理,判斷末尾是否有'\' ????????????????path = path.Substring(0, path.Length - 1);//有則刪掉 ??????????? ????????????string strSql = "server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master";//連接數據庫字符串 ????????????string DataName = @"StuBoardDB";//數據庫名 ????????????string strMdf = path + @"XSJSGLXT.mdf";//MDF文件路徑,這里需注意文件名要與剛添加的數據庫文件名一樣! ????????????SetFullControl(strMdf);??? //設置權限為EveryOne ????????????string strLdf = path + @"XSJSGLXT_log.ldf";//LDF文件路徑 ????????????SetFullControl(strLdf);??? //設置權限為EveryOne ????????????base.Install(stateSaver); ????????????this.CreateDataBase(strSql, DataName, strMdf, strLdf, path);//開始創建數據庫 ????????} ????} } 可能你看到代碼比較多,其實這些你都可以重用,你只需要改其中的一點點就行了。如下圖(黑框里面的東西):你懂得。 |
第十五步:
好了,最后,生成安裝包。
轉載于:https://www.cnblogs.com/Freedom0221/p/11006200.html
總結
以上是生活随笔為你收集整理的C#写的windows应用程序打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 操作方法
- 下一篇: linux 查看服务器序列号(S/N)