学习:Web安装项目创建桌面快捷方式及重写安装类(转)
一、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 TestInstallCLB
{
??? [RunInstaller(true)]
??? public partial class Installer2 : Installer
??? {
??????? public Installer2()
??????? {
??????????? InitializeComponent();
??????? }
??????? public override void Install(System.Collections.IDictionary stateSaver)
??????? {
??????????? // 創建桌面快捷方式及圖標,借助.url生成網絡快捷方式
?
??????????? // 先進行安裝,因為安裝后才會有安裝目錄
??????????? base.Install(stateSaver);??
?
??????????? //獲取軟件安裝的物理目錄,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll
??????????? string fname = System.Reflection.Assembly.GetExecutingAssembly().Location;
?
??????????? //也可以獲取軟件安裝的物理目錄,和上面獲取的結果一樣,形如:D:\Inetpub\wwwroot\Endy_Web\InstallClass.dll
??????????? //string fname2 = Context.Parameters["assemblypath"];
?
??????????? 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 + "測試站點.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文件內容
最后客戶端安裝完畢后桌面生成快捷方式("我的測試軟件.url"實際上是看不到擴展名的)用記事本打開內容如下:
[InternetShortcut]
URL=http://localhost/EndyWeb
IconFile=C:\Inetput\wwwroot\EndyWeb\logo.ico
IconIndex=0
?
文章來源:http://hi.baidu.com/xtuwangzhi/blog/item/472217475dbef80f6a63e5f6.html
轉載于:https://www.cnblogs.com/LeimOO/archive/2009/09/03/1559274.html
總結
以上是生活随笔為你收集整理的学习:Web安装项目创建桌面快捷方式及重写安装类(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue3项目中使用AE+bodymovi
- 下一篇: 高等数学(第七版)同济大学 习题1-9