| 一.WEB安裝項目部署 1.新建:新建項目-安裝和部署項目-WEB安裝項目 2.部署: (1)進入文件系統視圖,"項目-右鍵-視圖-文件系統";也可以直接點"解決方案資源管理器"上部的快捷圖標 (2)在"WEB應用程序文件夾"添加文件,例如aspx文件,ico文件,bin目錄及文件,images目錄及文件等 (3)設置虛擬目錄屬性,右擊"WEB應用程序文件夾"選屬性,一般只須修改默認文檔"defaultdocument"以及虛擬目錄名"VirtualDirectorly"(若有多個虛擬目錄 (4)Web安裝項目默認沒有提供"用戶的程序菜單",需要自己創建:右擊"目標計算機上的文件系統-添加特殊文件夾-用戶的程序菜單" (5)Web安裝項目默認也沒有用戶桌面目錄,添加方法同上 右擊"目標計算機上的文件系統-添加特殊文件夾-WEB自定義文件夾",逐次添加多個,但需要指出的是,這些多的虛擬目錄只能在設計時設置好名稱等屬性,而在安裝過程中卻無從控制) 補充: 在web項目部署時,添加網站有兩種方式: ①把你的網站先發布,然后把發布后的頁面一一添加進來同時把諸如images之類的文件夾要在安裝部署項目中文件夾然后再添加其下文件 ②在安裝部署項目中添加項目輸出,選擇你的網站,但這樣做部署項目會把你網站所有文件包括.cs文件原樣打包進去,不太好 二.重寫安裝類: 1.作用:安裝類是在安裝部署項目被生成后,在被"安裝","提交","回滾","卸載"的過程中來完成一些自定義的操作 2.創建: (1)新建一個類庫項目 (2)刪掉類庫中原有類文件,新建一個"安裝程序類"("添加新項"中有這個模版的) (3)自定義方法:這個安裝類特殊就在于引用了System.Configuration.Install.dll并using System.Configuration.Install和繼承:Installer 在自定義方法中主要是對Install,Uninstall,Commit,Rollback方法進行override重寫 3.使用:創建完后,還不起效,要和安裝部署項目配合才得以使用 方法一: (1)在安裝部署項目中將剛才類庫項目添加為"項目輸出-主輸出" (2)在安裝部署項目"視圖-自定義操作"的"安裝","提交","回滾","卸載"等操作上"右鍵-添加自定義操作"選擇剛才添加的類庫項目輸出 方法二: (1)將類庫進行編譯,生成.dll (2)在安裝部署項目"視圖-自定義操作"的"安裝","提交","回滾","卸載"等操作上"右鍵-添加自定義操作"選擇文件,瀏覽到你編譯生成的.dll 至此,你所寫的安裝類將在"安裝","卸載","回滾","提交"過程中起效了! 三.為Web安裝項目添加桌面快捷方式及圖標 1.Web安裝項目特殊于一般的安裝部署項目: (1)Web安裝項目無法在自身加入的網站項目中創建快捷方式,可以借助創建.url文件方式來創建(注:.lnk也是快捷方式文件,但安裝部署項目不允許添加.lnk文件,卻可以添加.url文件) (2)Web安裝項目默認沒有用戶桌面和用戶程序菜單的添加,要"文件系統視圖-右鍵-添加特殊文件夾-***"中添加一些特殊操作 (3)Web安裝項目在安裝過程中用戶自己動態設置"虛擬目錄",所以.url文件中不能先前定死http://localhost/***,只能通過"安裝類"在自定義"安裝"操作時動態創建 2.創建"安裝類"并添加到Web安裝項目的"自定義操作"的"安裝"下,內容如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.IO; using System.DirectoryServices;//操作IIS虛擬目錄 namespace InstallClass { ??? [RunInstaller(true)] ??? public partial class InstallerClass : Installer ??? { //重寫安裝方法 ??????? public override void Install(System.Collections.IDictionary stateSaver) ??????? { ??????????? //創建桌面快捷方式及圖標,借助.url生成網絡快捷方式 ??????????? base.Install(stateSaver);//先進行安裝,因為安裝后才會有安裝目錄 ??????????? string fname = System.Reflection.Assembly.GetExecutingAssembly().Location;//獲取軟件安裝的物理目錄,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll ??????????? //string fname2 = Context.Parameters["assemblypath"];//也可以獲取軟件安裝的物理目錄,和上面獲取的結果一樣,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll ??????????? string[] sz = fname.Split(new char[] { '\\'}); ??????????? StreamWriter sw = new StreamWriter(File.Open(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\我的測試軟件.url", FileMode.Create, FileAccess.Write)); ??????????? sw.WriteLine("[InternetShortcut]"); ??????????? sw.WriteLine("URL=http://localhost/"+sz[sz.Length-2]); ??????????? sw.WriteLine("IconFile="+fname.Substring(0,fname.LastIndexOf("\\"))+"\\logo.ico"); ??????????? sw.WriteLine("IconIndex=0"); ??????????? sw.Flush(); ??????????? sw.Close(); ???? //創建用戶"程序"菜單快捷方式及圖標,借助.url生成網絡快捷方式(要和界面添加的用戶程序目錄一致) ??????????? /*處理"開始-程序"目錄的位置,因為默認SpecialFolder.Programs會到當前用戶的程序目錄下,而我們要處理到All User的程序目錄下, ??????????? 因為在web部署項目中添加卸載快捷方式時,我們在"文件系統視圖-右鍵-添加特殊文件夾-用戶的'程序'菜單"是添加到All User的程序目錄下的,所以下面用程序創建的要和界面添加的保持一致, ??????????? 同時當添加到All User的程序目錄下,那么所有用戶的程序菜單中都會有的*/ ??????????? string str = Environment.GetFolderPath(Environment.SpecialFolder.Programs); ??????????? string[] arr = str.Split(new char[] { '\\' }); ??????????? arr[arr.Length - 3] = "All Users"; ??????????? string t = ""; ??????????? foreach (string i in arr) ??????????????? t += i + "\\"; ??????????? StreamWriter swr = new StreamWriter(File.Open(t + "Endy測試項目\\我的測試軟件.url", FileMode.Create, FileAccess.Write)); ??????????? swr.WriteLine("[InternetShortcut]"); ??????????? swr.WriteLine("URL=http://localhost/" + sz[sz.Length - 2]); ??????????? swr.WriteLine("IconFile=" + fname.Substring(0, fname.LastIndexOf("\\")) + "\\logo.ico"); ??????????? swr.WriteLine("IconIndex=0"); ??????????? swr.Flush(); ??????????? swr.Close(); ??????? } //重寫卸載方法[本想卸載時刪除虛擬目錄和安裝目錄,但沒成功] ??????? public override void Uninstall(System.Collections.IDictionary savedState) ??????? { ??????????? base.Uninstall(savedState);//先進行卸載 ??????????? //刪除虛擬目錄[有問題不能用] ??????????? //System.DirectoryServices.DirectoryEntry dirroot = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT"); ??????????? //DirectoryEntry Dirport = dirroot.Children.Find("Endy_Web","IIsVirtualDir"); ??????????? //Dirport.Invoke("AppDelete", true); ??????????? //dirroot.CommitChanges(); ??????????? //刪除安裝文件夾[有問題不能用] ??????????? //string fname = Context.Parameters["assemblypath"]; ??????????? //if (Directory.Exists(fname.Substring(0, fname.LastIndexOf("\\")))) ??????????? //{ ??????????? //??? DirectoryInfo di=new DirectoryInfo(fname.Substring(0, fname.LastIndexOf("\\"))); ??????????? //??? foreach (FileInfo f in di.GetFiles()) ??????????? //??????? f.Delete(); ??????????? //??? di.Delete(); ??????????? //} ??????? }????? ??? } } 最后客戶端安裝完畢后桌面生成快捷方式("我的測試軟件.url"實際上是看不到擴展名的)用記事本打開內容如下: [InternetShortcut] URL=http://localhost/EndyWeb IconFile=C:\Inetput\wwwroot\EndyWeb\logo.ico IconIndex=0 |