C#写的一个网站管理工具

自写C#添加网站应用程序池虚拟目录实现网站管理,做为一个使用C#语言开发web项目的开发人员,基本上都熟悉一些IIS的管理工作,例如手动在IIS上创建网站,创建应用程序,创建虚拟目录等,那么你是否想过自己实现一个网站管理工具来实现自动建站呢?本文就来阐述如何实现这样的网站管理工具。

如果你还不熟悉怎样怎样在IIS上部署网站,可以阅读下面的这些文章。

使用VS 2019发布.net core程序并部署到IIS的最新教程

通过VS2017发布.net core程序并使用Web 部署到远程服务器最新教程

如何使用IIS发布和运行ASP.NET Core 应用程序

通常来说网站管理工具可以完成一些不通过IIS就可以在Windows服务器上创建网站,创建应用程序池,绑定域名,建立虚拟目录,应用程序等,以及数据库的相关管理工作,这样的工具就是方便小白用户管理网站,国内的有一些提供windows vps或者windows云服务器的服务商也会在你购买的windows vps或者windows云服务器上提供这样的网站管理工具。

闲话少说,下面将分别介绍怎样使用C#代码添加IIS应用程序池、网站、虚拟目录、应用程序等功能,并将添加的应用程序池和网站关联。不过在开始之前,还是展示一下这个示例程序的界面吧:

打包安装程序下载

在源码中,我将该程序打包为了一个安装程序,你可以下载打包后的程序体验一翻,另外需要注意的是,无论你将源码从github上clone下来,还是下载安装程序来体验,都需要使用管理员权限来运行程序或者运行VS2019打开源码才行,不然会报没有权限的错误,毕竟操作IIS是需要管理员权限的

永久下载地址:查看原文

C#添加用程序池

ServerManager serverManager = new ServerManager();

if (textBox4.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入应用程序池名称");

    return;

}

if (comboBox2.SelectedItem == null)

{

    MessageBox.Show("请选择托管模式");

    return;

}

if (comboBox1.SelectedItem == null)

{

    MessageBox.Show("请选择应用程序标识");

    return;

}

var appool = serverManager.ApplicationPools.Add(textBox4.Text);

appool.ManagedPipelineMode = (ManagedPipelineMode)Enum.Parse(typeof(ManagedPipelineMode), omboBox2.SelectedItem.ToString());

appool.ProcessModel.IdentityType = (ProcessModelIdentityType)Enum.Parse(typeof(ProcessModelIdentityType), omboBox1.SelectedItem.ToString());

serverManager.CommitChanges();

MessageBox.Show("创建应用程序池成功");

正如上面的代码那样,一开始实例化了一个ServerManager对象,这个对象至关重要,在我们通过C#来添加网站、虚拟目录、应用程序池、应用程序时,会一直使用它的,你需要通过Nuget添加命名空间Microsoft.Web.Administration的引用。

添加完应用程序池后,在IIS里面可以看到如下图所示的结果:

C#添加网站

if (textBox1.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入网站名称");

    return;

}

if (textBox6.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请指定网站路径");

    return;

}

if (textBox8.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请先创建应用程序池");

    return;

}

try

{

    ServerManager serverManager = new ServerManager();

    Site site = serverManager.Sites.Add(textBox1.Text.Trim(), textBox6.Text, int.Parse(textBox13.Text));

    site.ServerAutoStart = true;

    site.Applications[0].ApplicationPoolName = textBox8.Text;

    site.Bindings.Clear();

    site.Bindings.Add($"{textBox5.Text}:{textBox13.Text}:{textBox2.Text}", "http");  //ip:端口:域名

    serverManager.CommitChanges();

    site.Start();

    MessageBox.Show("创建网站成功!");

}

catch (Exception ex)

{

    MessageBox.Show($"创建网站过程出错,原因:{ex.Message}");

}

最核心的代码就是try catch块里面的创建网站代码,可以看到,依然使用了ServerManager对象来完成网站的创建工作,在创建网站的同时,代码中设置网站为自动启动,即网站创建好了之后就启动网站,之后就为网站设置应用程序池,最后通过调用serverManager.CommitChanges方法提交变更就可以了,这样就完成了网站的创建工作。

添加完网站后,刷新一下IIS就可以看到你刚才添加成功的网站,如下图所示,可以看到已经成功绑定了域名,端口等。

在IIS上查看 C#添加的网站

接下来看看如何通过C#代码来实现添加虚拟目录的功能。

C#添加虚拟目录

if (textBox3.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入虚拟目录名称");

    return;

}

if (textBox7.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入虚拟目录路径");

    return;

}

if (!Directory.Exists(textBox7.Text))

{

    MessageBox.Show("不要乱输,虚拟目录必须存在!");

    return;

}

try

{

    ServerManager serverManager = new ServerManager();

    var app = serverManager.Sites[comboBox4.SelectedText].Applications[0];

    app.VirtualDirectories.Add($"/{textBox3.Text}", textBox7.Text);

    serverManager.CommitChanges();

    MessageBox.Show("虚拟目录创建成功!");

}

catch (Exception ex)

{

    MessageBox.Show($"创建虚拟目录出错,原因:{ex.Message}");

}

上面的代码也是通过ServerManager对象完成虚拟目录的添加,这里需要注意的是,添加虚拟目录需要使用 / 符号设定路径,小编刚开始没有指定 / 符号,结果报错,加上就对了。

虚拟目录嵌套应用程序

在IIS上实际部署网站的过程中,即可以在虚拟目录里面嵌套应用程序,也可以在应用程序里面嵌套应用程序,就像俄罗斯套娃一样,一个套一个那样都是可以的。

下面的示例代码就是在虚拟目录里面添加应用程序。

if (string.IsNullOrEmpty(comboBox4.SelectedText))

{

    MessageBox.Show("请选择隶属网站,无可选项时请先添加一个网站!");

    return;

}

if (textBox3.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入虚拟目录名称!");

    return;

}

if (textBox14.Text.IsNullOrWhiteSpace())

{

    MessageBox.Show("请输入应用程序名称!");

    return;

}

if (!Directory.Exists(textBox15.Text))

{

    MessageBox.Show("不要乱输,应用程序目录必须存在!");

    return;

}

try

{

    ServerManager serverManager = new ServerManager();

    var site = serverManager.Sites[comboBox4.SelectedText];

    var app = site.Applications.Add($"/{textBox3.Text}/{textBox14.Text}", textBox15.Text);

    app.ApplicationPoolName = textBox4.Text;  //设置应用程序池

    serverManager.CommitChanges();

    MessageBox.Show("虚拟目录下创建应用程序池成功!");

}

catch (Exception ex)

{

    MessageBox.Show($"虚拟目录下创建应用程序池出错,原因:{ex.Message}");

}

在虚拟目录里面添加应用程序,只需要像上面try catch块里面的这行代码site.Applications.Add($”/{textBox3.Text}/{textBox14.Text}”, textBox15.Text); 那样,textBox3.Text就是虚拟目录名称,而textBox14.Text就是应用程序名称。添加好了之后如下图所示那样:

使用C#在指定的虚拟目录下添加应用程序

C#在虚拟目录下添加的应用程序

C#添加应用程序

C#代码实现在选定的网站下面添加应用程序

if (string.IsNullOrEmpty(comboBox5.SelectedText))

{

    MessageBox.Show("请选择隶属网站,无可选项时请先添加一个网站!");

    return;

}

try

{

    ServerManager serverManager = new ServerManager();

    var site = serverManager.Sites[comboBox5.SelectedText];

    var app = site.Applications.Add($"/{textBox12.Text}", textBox11.Text);

    app.ApplicationPoolName = textBox4.Text;  //设置应用程序池

    serverManager.CommitChanges();

    MessageBox.Show("站点根目录下创建应用程序池成功!");

}

catch (Exception ex)

{

    MessageBox.Show($"站点根目录下创建应用程序池出错,原因:{ex.Message}");

}

IIS里面查看刚才添加的应用程序

github源码地址:https://github.com/jhrscom/sitemanage

写在最后

以上的代码就是最近的工作中,在编写一个自动回收IIS应用程序池的Windows服务程序,顺手编写的网站管理工具的demo程序,以上代码只是最基本的在IIS上完成添加网站,添加虚拟目录,应用程序,应用程序池等;其实你完全可以通过C#代码添加网站,C#添加用程序池,C#代码为网站添加虚拟目录,C#代码为网站添加应用程序等功能来实现一个自己的网站管理工具。

本身编写这个程序的目的是为了实现内网环境下两台Windows服务器或者多台Windows服务器之间进行站点自动迁移部署,自动在目标服务器上创建网站。运维人员使用时只需要填一下新服务器的IP地址,域名,有证书设置下证书等就可以不用管了,剩下的工作由程序自动从旧服务器上将网站迁移到新服务器上并完成网站搬家部署。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359