c# 在windows中操作IIS设置FTP服务器的示例
作者:conan 发布时间:2023-07-18 06:13:01
标签:c#,IIS,ftp服务器,windows
什么是FTP
FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。 这样,其他计算机便可以连接到服务器并将文件复制到服务器或者从服务器复制文件。 例如,如果您在自己的计算机上承载网站,并且希望允许远程用户连接到您的计算机并将他们的文件复制到服务器,则可以将 IIS 配置为充当 FTP 服务器。
主要实现方式
下面主要讲解一下,在Window的IIS中创建FTP的Site。
1、创建站点
public int createFtpSite(string ftpname,string path){
int errorCode = ErrorCode.Succeed;
if (ftpname == "" && path == "")
{
try
{
ServerManager iisManager = new ServerManager();
Configuration cfg = iisManager.GetApplicationHostConfiguration();
/*---- 停止21端口 ----*/
try
{
/*---- sites ----*/
foreach (var ftpsite in iisManager.Sites)
{
/*
* 站点描述
*/
string sitename = ftpsite.Name;
/*
* 站点绑定域名和端口
*/
foreach (Binding binding in ftpsite.Bindings)
{
try
{
string currentServerBindings = binding.GetAttributeValue("BindingInformation").ToString();
string port = currentServerBindings.Split(":".ToArray())[1];
if (port == "21")
{
try
{
//stop site
ftpsite.Stop();
}
catch
{
//doing nothing
}
break;
}
}
catch
{
//doing nothing
}
}
}
//提交更改
iisManager.CommitChanges();
}
catch
{
//do nothing
}
/*
* 创建FTP
*/
if (!System.IO.Directory.Exists(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath")))//创建站点路径
{
System.IO.Directory.CreateDirectory(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
}
Site site = iisManager.Sites.Add(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp"), "ftp", string.Format("*:{0}:", "21"), System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
iisManager.CommitChanges();
//设置FTP SSL权限
SetFtpSSL();
//设置FTP Everyone权限
IISUtil.IISCore.AddSiteUtil addsiteUtil = new AddSiteUtil();
try
{
string config_rootpath = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath");
//string rootpath = path.Substring(0, path.IndexOf(ftpname) - 1) + "\\ftproot";
if (!System.IO.Directory.Exists(config_rootpath))
{
System.IO.Directory.CreateDirectory(config_rootpath);
}
addsiteUtil.icaclsSet("Everyone", System.Configuration.ConfigurationManager.AppSettings.Get("defaultftpath"));
/*---- hide ----*/
System.IO.File.SetAttributes(config_rootpath, System.IO.FileAttributes.Hidden);
}
catch
{
}
}
catch
{
errorCode = ErrorCode.ftpSiteFail;
}
}
else
{
if (!getFtpState(ftpname))//判断ftp用户是否存在
{
/*---- FTP状态检查 ----*/
FtpStateInit();
try
{
using (ServerManager iisManager = new ServerManager())
{
Site site = iisManager.Sites.FirstOrDefault(o => ((string)o["name"]).Contains(System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp")));
var vird = site.Applications[0].VirtualDirectories["/" + ftpname];
if (vird == null) { site.Applications[0].VirtualDirectories.Add("/" + ftpname, path); }
else { errorCode = ErrorCode.ftpExists; }
iisManager.CommitChanges();
//添加FTP访问权限
SetFtpAccess(ftpname);
}
}
catch
{
errorCode = ErrorCode.ftpSiteFail;
}
}
else
{
errorCode = ErrorCode.ftpExists;
}
}
return errorCode;
}
2、站点列表
/// <summary>
/// iis6获取所有ftp站点信息
/// </summary>
/// <param name="newsitename"></param>
/// <returns></returns>
public static List<string> iGetFtpInfos()
{
List<string> ftpinfos = new List<string>();
try
{
string ftproot = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");
string ftpname = "";//用户名
string ftppass = "";//密码
string ftppath = "";//物理路径
string iisversion = "";//iis版本
string majorversion = IISCore.IISInfoUtil.SGetIISMajorVersion();
if (majorversion == "")
{
iisversion = "未知";
}
else
{
iisversion = majorversion.ToString();
}
/*
* 创建FTP 子站点
*/
var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象
DirectoryEntry rootentry = new DirectoryEntry("IIS://localhost/W3SVC");//创建IIS管理对象
foreach (DirectoryEntry sitechild in siteEntry.Children)
{
if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer")) //IIsFtpServer代表FTP
continue;
string yftpname = sitechild.Properties["ServerComment"].Value.ToString();
string defaultftpname = System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp");
if (yftpname == defaultftpname)
{
try
{
//获取站点信息
var root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");
DirectoryEntries ftps = root.Children;
foreach (DirectoryEntry ftp in ftps)
{
ftpname = ftp.Name;
/*
* 获取密码
*/
try
{
/*
* 循环站点获取站点信息
*/
foreach (DirectoryEntry child in rootentry.Children)
{
if (child.SchemaClassName == "IIsWebServer" && child.Properties["ServerComment"].Value.ToString() == ftpname)
{
ftppass = child.Properties["AnonymousUserPass"].Value.ToString();
/*
* 获取站点目录
*/
foreach (DirectoryEntry rootChild in child.Children)
{
string name = rootChild.Name.ToString();
if ((rootChild.SchemaClassName == "IIsWebVirtualDir") && (rootChild.Name.ToString().ToLower() == "root"))
{
if (rootChild.Properties["Path"].Value == null)
{
ftppath = "";
}
else
{
ftppath = rootChild.Properties["Path"].Value.ToString().Substring(0, rootChild.Properties["Path"].Value.ToString().LastIndexOf("\\"));
}
}
}
}
}
}
catch
{
}
/*
* 获取路径
*/
if(ftpname != "")
ftpinfos.Add(ftproot + "-@-" + ftpname + "-@-" + ftppass + "-@-" + ftppath + "-@-" + iisversion);//添加到站点信息
}
}
catch
{
}
}
}
}
catch
{
}
return ftpinfos;//返回数据
}
3、删除站点
public static bool DeleteQFtp(string ftpname)
{
bool flag = false;
try{
/*
* 删除FTP 子站点
*/
var siteEntry = new DirectoryEntry("IIS://localhost/MSFTPSVC");//IIS6管理对象
if (ftpname != "")
{
foreach (DirectoryEntry sitechild in siteEntry.Children)
{
if (!sitechild.SchemaClassName.EqualsEx("IIsFtpServer")) //IIsFtpServer代表FTP
continue;
string yftpname = sitechild.Properties["ServerComment"].Value.ToString();
if (yftpname.ToLower() == System.Configuration.ConfigurationManager.AppSettings.Get("defaultftp").ToLower())
{
try
{
DirectoryEntry root = sitechild.Children.Find("ROOT", "IIsFtpVirtualDir");
var ftpchild = root.Children.Find(ftpname, "IIsFtpVirtualDir");
if (ftpchild != null)
{
//删除
root.Children.Remove(ftpchild);
root.CommitChanges();
sitechild.CommitChanges();
siteEntry.CommitChanges();
flag = true;
}
}
catch
{
flag = false;
}
}
}
}
}
catch
{
}
return flag;
}
来源:https://mp.weixin.qq.com/s/LAp0DT4SLGMiVrj2OLK0Iw
0
投稿
猜你喜欢
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- 1.引言在开发中,拖放是一种比较常见的手势操作,使用它能够让应用的交互更加地便捷和友好,本文将简要介绍如何为Android中的View添加拖
- 前言前面介绍了APP顶部导航栏AppBar,今天来介绍下Flutter实现APP底部导航栏。我们以仿写微信的底部导航栏来举例说明。要实现类似
- 一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Andr
- 相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线void fitLine( InputArray points, Output
- java 进制转换实例详解十进制转成十六进制:  
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 废话开篇:iOS与android在实现列表界面的时候是有重用机制的,目的就是减少内存开销,用时间换空间。个人感觉flutter并没有特别强调
- 本文向您展示了在 Flutter 中实现完美的验证码输入框几种不同方法。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通
- 一:问题描述 在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些a
- IOS与网页JS交互随着移动APP的快速迭代开发趋势,越来越多的APP中嵌入了html网页,但在一些大中型APP中,尤其是电商类
- Android 微信摇一摇功能实现,最近学习传感器,就想实现摇一摇的功能,上网查了些资料,就整理下。如有错误,还请指正。开发环境Androi
- 背景后台系统需要接入 企业微信登入,满足企业员工快速登入系统流程图简单代码说明自定义一套 springsecurity 认证逻辑主要就是 根
- 1、首先导入solrj需要的的架包2、需要注意的是低版本是solr是使用SolrServer进行URL实例的,5.0之后已经使用SolrCl
- 本文实例为大家分享了Android实现支付宝支付密码输入界面的具体代码,供大家参考,具体内容如下效果图:主要代码:import java.u
- BitArray的基础可以看菜鸟编程BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),
- tcp客户端示例#include <errno.h> #include <sys/socket.h> #includ
- 这篇会深化View拖拽实例,利用Flutter Animation、插值器以及AnimatedBuilder教大家实现带动画的抽屉效果。先来
- 需求基于MTK8163 8.1平台定制导航栏部分,在左边增加音量减,右边增加音量加思路需求开始做之前,一定要研读SystemUI Navig