Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
第一步先講虛擬目錄的配置,虛擬目錄的配置簡(jiǎn)單來說就是創(chuàng)建虛擬目錄。用手工的方式實(shí)現(xiàn)非常簡(jiǎn)單,直接設(shè)定“Web sharing”就可以了,讓我們看看怎么通過編程的方式實(shí)現(xiàn),本文將介紹兩種創(chuàng)建虛擬目錄的方法:
1、通過調(diào)用iisvdir.vbs,
2、通過System.DirectoryServices.DirectoryEntry。
如果看官有其他的方法,歡迎討論chwkai@gmail.com。
為了方便描述,我寫了兩個(gè)虛擬目錄操作類,簡(jiǎn)單的封裝了iisvdir.vbs和System.DirectoryServices.DirectoryEntry管理虛擬目錄的方法,結(jié)構(gòu)如下所示:
Server為iis服務(wù)器的ip或機(jī)器名,User和Password為該服務(wù)器的管理員用戶名和密碼,Alias為虛擬目錄的名稱,VirtualRoot為虛擬目錄所在根目錄的名稱(如下圖),PhysicalPath為該虛擬目錄相應(yīng)的物理路徑。如果想進(jìn)一步了解IIS虛擬目錄的屬性,可以參考MSDN?IIsWebVirtualDir。
通過調(diào)用iisvdir.vbs創(chuàng)建虛擬目錄
看官可以參考一下MSDN的相關(guān)資料:
Creating Web Virtual Directories Using Iisvdir.vbs
Deleting Web Virtual Directories Using Iisvdir.vbs?
Listing Web Virtual Directories Using Iisvdir.vbs?
.
仔細(xì)看還會(huì)發(fā)現(xiàn), IIS管理器也是通過調(diào)用iisvdir.vbs來實(shí)現(xiàn)虛擬目錄的創(chuàng)建和刪除的。我們可以通過命令行的方式來執(zhí)行iisvdir.vbs腳本,
1)創(chuàng)建虛擬目錄:
2)刪除虛擬目錄:
3)查看指定虛擬目錄下的全部子目錄:
通過封裝這三個(gè)操作,可以實(shí)現(xiàn)iis虛擬目錄的創(chuàng)建、刪除和判斷是否存在:
1)創(chuàng)建虛擬目錄:
?2?????????///?創(chuàng)建iis虛擬目錄
?3?????????///?</summary>
?4?????????///?<exception?cref="CreateIIsDirectory.DirectoryException">虛擬目錄操作異常</exception>
?5?????????public?override?void?CreateDirectory()
?6?????????{
?7?????????????//?已不覆蓋的方式創(chuàng)建虛擬目錄,當(dāng)虛擬目錄存在時(shí)拋出異常
?8?????????????this.CreateDirectory(false);
?9?????????}
10?
11?????????///?<summary>
12?????????///?創(chuàng)建iis虛擬目錄
13?????????///?</summary>
14?????????///?<param?name="bReplace">是否覆蓋掉原有的虛擬目錄</param>
15?????????///?<exception?cref="CreateIIsDirectory.DirectoryException">虛擬目錄操作異常</exception>
16?????????public?override?void?CreateDirectory(bool?bReplace)
17?????????{
18?????????????//?判斷目錄是否存在
19?????????????if?(this.Exist())
20?????????????{
21?????????????????if?(bReplace)
22?????????????????{
23?????????????????????//?若允許覆蓋則先刪除原有的虛擬目錄
24?????????????????????this.DeleteDirectory();
25?????????????????}
26?????????????????else
27?????????????????{
28?????????????????????//?若不允許覆蓋直接拋出目錄已存在的異常
29?????????????????????DirectoryException.Throw("directory?already?exist");
30?????????????????}
31?????????????}
32?
33?????????????ReturnMessage?message?=?ScriptDirectory.ExecuteScript(
34?????????????????this,?ScriptDirectory.CONST_ACTION_CREATE);
35?
36?????????????//?輸出message信息供nunit查看
37?????????????Console.WriteLine("return?code:?"?+?message.Code);
38?????????????Console.WriteLine("return?message:?\n"?+?message.Message);
39?
40?????????????//?若創(chuàng)建失敗拋出虛擬目錄操作異常
41?????????????if?(message.Code?!=?0)
42?????????????{
43?????????????????DirectoryException.Throw(message.Message);
44?????????????}
45?????????}
2)刪除虛擬目錄:
?2?????????///?刪除iis虛擬目錄
?3?????????///?</summary>
?4?????????///?<exception?cref="CreateIIsDirectory.DirectoryException">虛擬目錄操作異常</exception>
?5?????????public?override?void?DeleteDirectory()
?6?????????{
?7?????????????ReturnMessage?message?=?ScriptDirectory.ExecuteScript(
?8?????????????????this,?ScriptDirectory.CONST_ACTION_DELETE);
?9?
10?????????????//?輸出message信息供nunit查看
11?????????????Console.WriteLine("return?code:?"?+?message.Code);
12?????????????Console.WriteLine("return?message:?\n"?+?message.Message);
13?
14?????????????//?若刪除失敗拋出虛擬目錄操作異常
15?????????????if?(message.Code?!=?0)
16?????????????{
17?????????????????DirectoryException.Throw(message.Message);
18?????????????}
19?????????}
?
3) 判斷虛擬目錄是否存在:
?
?1?///?<summary>?2?????????///?判斷iis虛擬目錄是否存在
?3?????????///?</summary>
?4?????????///?<returns>目錄是否存在</returns>
?5?????????public?override?bool?Exist()
?6?????????{
?7?????????????ReturnMessage?message?=?ScriptDirectory.ExecuteScript(
?8?????????????????this,?ScriptDirectory.CONST_ACTION_QUERY);
?9?????????????bool?bExist?=?false;
10?
11?????????????//?輸出message信息供nunit查看
12?????????????Console.WriteLine("return?code:?"?+?message.Code);
13?????????????Console.WriteLine("return?message:?\n"?+?message.Message);
14?
15?????????????//?從返回字符串中判斷該虛擬目錄是否存在
16?????????????if?(message.Code?==?0)
17?????????????{
18?????????????????Regex?reg?=?new?Regex("/"?+?this.m_strAlias?+?@"\s+");
19?????????????????message.Message?=?message.Message.Substring(
20?????????????????????message.Message.IndexOf("/"));
21?
22?????????????????bExist?=?reg.IsMatch(message.Message);
23?????????????}
24?
25?????????????return?bExist;
26?????????}
ScriptDirectory.ExecuteScript函數(shù)封裝了iisvdir.vbs的調(diào)用和參數(shù)的組合,代碼比較長(zhǎng),大家可以在/Files/chwkai/CreateIIsDirectory.rar下載到本文所討論的代碼。
orz,明天還有場(chǎng)球賽,睡覺了。下次的文章將繼續(xù)寫到,如何用System.DirectoryServices.DirectoryEntry來創(chuàng)建IIS虛擬目錄,相對(duì)于iisvdir.vbs,這種方式更加靈活,并且具有更多的功能,如設(shè)定虛擬目錄屬性等。
總結(jié)
以上是生活随笔為你收集整理的Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shape file与coverage叠
- 下一篇: 实验部分类的代码