重要更新:鑒于很多小伙伴們說看不到圖,我這邊換了幾個瀏覽器看了下,都看得到的,估計是網速問題,請耐心等待,另外,為了更好的方便大家學習,特此提供源碼以及一個word文檔,word文檔就是本文內容,包括圖片,下載鏈接在最底下,謝謝.
前言:最近公司有個Web要發布,但是以前都是由實施到甲方去發布,配置,這幾天有點閑,同事讓我搞一個一鍵發布,就和安裝軟件那樣的程序,好讓實施直接配置一下數據庫就可以了,然后到網上搜了下,找到一些相關的教程,現在整理了一下,花了一個下午的時間來寫筆記,寫好了,首先奉獻給博客園的小伙伴們,和大伙兒分享一下,好了,下面進入主題~~~
1,首先打開VS2010,新建一個項目,如圖1-1所示:
圖1-1
2,然后再按照圖2-1所示操作,添加現有項目,現有項目就是您要發布的Web的項目,這里只需要添加Web的那一個項目即可,類庫那些可以不用添加;
圖2-1
3,添加完之后,如圖3-1所示
圖3-1
4,接著按照圖4-1所示操作,添加項目輸出:
圖4-1
5,如圖5-1所示,添加相應的項目輸出,項目選中您要發布的項目,我這里是Web,然后里面選中:"本地化資源"和"內容文件",然后確定添加.
圖5-1
6,接下來,我們轉到用戶界面,如圖6-1所示:
圖6-1
7,在啟動那里右鍵→添加對話框,如圖7-1所示:
圖7-1
8,這次,我們依次添加許可協議(圖8-1),文本框(A)(圖8-2),有需要的情況,可以再添加一個客戶信息,這個看個人所需,這里就不再一一演示了.
圖8-1
圖8-2
9,然后我們先右鍵,把位置整理好來,如圖9-1所示:
圖9-1
10,現在我們來說說許可協議的方面,現在先新建一個word文檔,然后在word文檔里面寫上一些字,這里就簡單寫了以下幾個字:"
這個是一個許可協議,同意請按”下一步”,不同意請按”取消”.";
然后另存為:如圖10-1所示:

圖10-1
然后選擇格式為rtf的文件保存起來,如圖10-2所示:

圖10-2
11,現在回到我們的程序里面,我們右鍵許可協議,選擇屬性,然后看到屬性框這里,把剛剛我們編輯好的rtf文件弄進來,具體操作如圖11-1,11-2,11-3所示:

圖11-1

圖11-2

圖11-3,
單擊"添加文件",然后選中剛剛您編輯好的rtf文件,確定即可,如圖11-4所示:

圖11-4;
12,現在我們來看看文本框的作用,首先給大家科普一下這個文本框的作用.大家在安裝軟件或者配置網站的時候,往往都會做一些數據庫配置的東西,因為不同的電腦,他的sql服務器名就不一樣,有些有了實例名,那就不能都默認為localhost了,還有用戶名,密碼什么的,每臺機器都不一樣,所以,這里我們就要用到文本框來幫我們錄入這些將要安裝部署我們網站的一些信息了.ok,下面,我們就來操作這個文本框了,如圖12-1所示,把該輸進去的輸好來,建議新手先按照我截圖的來輸,到后面自己熟練了再做修改,

圖12-1
13,完成12的操作的時候,接下來,我們回到上面,添加一個新建項目,如圖13-1所示:

圖13-1
然后我們添加一個安裝類,如圖13-2所示:

圖13-2
接下來,我們在新建好的類庫里面,右鍵再添加一個新建項,如圖13-3,所示:

圖13-3
接下來,我們選擇新建項為一個"安裝程序類",如果找不到,可以在右上角的搜索框哪里輸入"安裝",搜索出來的結果第一個就是了,如圖13-4所示:

圖13-4
添加完了以后,我們就切換到代碼模式,看看這個類有啥東東,來,一起gogogo,如圖13-5所示:

圖13-5
我們發現,他的代碼很簡潔,如圖13-6所示:

圖13-6
14,好嘞,做完這一步我們返回解決方案這邊來,右鍵項目,添加項目輸出,如圖14-1所示:

圖14-1
然后:項目選擇---安裝類,然后內容選擇主輸出,確定就好,如圖14-2所示:

圖14-2
15,接下來,我們就轉到自定義操作這邊來,如圖15-1所示:

圖15-1
然后右鍵添加自定義操作,如圖15-2所示:

圖15-2
然后雙擊進入"應用程序文件夾",如圖15-3所示:

圖15-3
然后選中"主輸出來自安裝類(活動)",點擊確定即可,如圖15-4所示:

圖15-4
16,然后在去到這個的屬性,如圖所示,輸入以下內容到相應位置,內容為(紅色字體,黑色的雙引號不要,但是紅色的雙引號要):"/dbname=[DBNAME] /server=[SERVER] /user=[UNAME] /pwd=[PWD] /targetdir="[TARGETDIR]\"",如圖16-1所示:

圖16-1
這里面就解釋以下,剛剛各位應該還有印象我們之前添加了一個文本框吧?還記得文本框的內容么?嘿嘿,來,咱給你回憶一下,如圖16-2所示:

圖16-2
哈哈,想起來了吧,對了,這里面就是把文本框的值弄過來滴...等下再告訴你怎么用.好的,昨晚這一步了,我們要回到"安裝類"里面來寫一寫代碼了.(什么!!!這都還要寫代碼?!樓主,你這是要鬧哪樣~~~樓主回復:小盆友,代碼不多滴,放心吧,呵呵)
17,現在我們回到安裝類庫下面的Installer1.cs,不會進入的就雙擊那個文件,然后點擊切換到后臺代碼即可,先把代碼補全,再慢慢給大伙解釋哈,如圖17-1所示;

圖17-1
詳細代碼:
/// <summary>
/// 重寫安裝方法
/// </summary>
/// <param name="stateSaver"></param>
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
string Server = Context.Parameters["server"].ToString();
string dbName = Context.Parameters["dbname"].ToString();
string userName = Context.Parameters["user"].ToString();
string userPass = Context.Parameters["pwd"].ToString();
string targetdir = Context.Parameters["targetdir"].ToString();
/*
* 設置webconfig連接字符串
*/
string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config");
//修改第一個數據庫連接
string webcofnigstring2 = File.ReadAllText(webconfigpath).Replace(@"server=JEFFREY9061\SQL2008;database=yd_esms;uid=sa;pwd=********", GetConnectionString2());
File.WriteAllText(webconfigpath, webcofnigstring2);
//修改第二個數據連接
string webcofnigstring = File.ReadAllText(webconfigpath).Replace(@"Data Source=JEFFREY9061\SQL2008;Initial Catalog=yd_esms;Persist Security Info=True;User ID=sa;Password=******", GetConnectionString());
File.WriteAllText(webconfigpath, webcofnigstring);
//這個是測試在安裝目錄下添加接收到的用戶填寫的數據庫信息
File.WriteAllText(Path.Combine(targetdir, "log.txt"), Server + "/n/r" + dbName + "/n/r" + userName + "/n/r" + userPass);
}
/// <summary>
/// 執行sql語句
/// </summary>
/// <param name="connection"></param>
/// <param name="sql"></param>
void ExecuteSQL(SqlConnection connection, string sql)
{
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.ExecuteNonQuery();
}
/// <summary>
/// 獲取文本框輸入的信息,來插入到登錄連接字符串
/// </summary>
/// <returns></returns>
private string GetConnectionString()
{
return @"Data Source=" + this.Context.Parameters["server"] + ";Initial Catalog=" + this.Context.Parameters["dbname"] + ";Persist Security Info=True;User ID=" + this.Context.Parameters["user"] + ";Password=" + this.Context.Parameters["pwd"] + "";
}
private string GetConnectionString2()
{
return @"server=" + this.Context.Parameters["server"] + ";database=" + this.Context.Parameters["dbname"] + ";uid=" + this.Context.Parameters["user"] + ";pwd=" + this.Context.Parameters["pwd"];
}
ok,現在我們來說說這個代碼的意思:
第一個,方法,重寫安裝方法這個就一般都看得懂了,前面幾個string都是獲取文本框的值的,下面的就是獲去web.config文件,然后修改里面的數據庫連接字符串的,因為我用到兩個連接字符串,所以寫了兩個,如果只有一個的,那就寫一個即可,這個各取所需哈.
18,(奶奶的,還有?那么長,老子不看了...)其實我想告訴你,結束啦,現在,我們只需要把項目從頭到尾(從上到下,先web,然后再安裝類,然后再"一鍵安裝抄表系統")生成一邊即可,生成完成后,我們就可以在項目右鍵安裝即可.如圖18-1所示:(什么!!!沒有足夠的權限不能運行?老兄,你可以右鍵,然后在windows打開文件夾,右鍵以管理員模式運行即可,小兒科啦,相信你懂的.,如圖18-2所示)

圖18-1

圖18-2
19:(怎么還有~~~,我的小宇宙要爆發啦...)小盆友們,別急,我下面給大家貼一貼圖,看看安裝過程而已,稍安勿躁哈...如圖19-1到19-8所示:

圖19-1

圖19-2

圖19-3(嘿嘿,這里就是剛剛的許可協議咯)

圖19-4(這里就是剛剛我們添加的文本框啦,知道用處了吧)

圖19-5(這里面選擇好你的應用程序池喲.)
ps:此程序默認的安裝路徑是:C:\inetpub\wwwroot,然后訪問的時候是:localhost:/xxx/即可,如圖19-6和圖19-7

圖19-6

圖19-7
看到這里,就完啦,如果覺得本文對您有所幫助,請點擊右下角的"好文要頂"支持一下,謝謝;
另外如果在安裝過程中碰到這個問題:

解決方法如下:

打包時加入卸載功能:
1.在打包項目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系統視圖中選擇應用程序活頁夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為”卸載”.
3.更改此快捷方式的Arguments 為”/x {產品id}”,產品id的值為打包項目的ProductCode屬性值.