C# 如何以编程方式启动IIS 6.0 SMTP虚拟服务器?
我想知道如何以编程方式重新启动IIS 6.0 SMTP服务器 我安装的SMTP服务器偶尔会崩溃。我有几天没有注意到,但现在做任何事情都为时已晚 我想每隔30分钟左右设置一个计划任务,以测试SMTP服务器是否正在运行,如果没有,则计划任务将自动启动并备份C# 如何以编程方式启动IIS 6.0 SMTP虚拟服务器?,c#,iis,smtp,C#,Iis,Smtp,我想知道如何以编程方式重新启动IIS 6.0 SMTP服务器 我安装的SMTP服务器偶尔会崩溃。我有几天没有注意到,但现在做任何事情都为时已晚 我想每隔30分钟左右设置一个计划任务,以测试SMTP服务器是否正在运行,如果没有,则计划任务将自动启动并备份 我找到了一种方法来检查SMTP服务器是否已启动并正在运行,但我还没有找到在进程崩溃时如何重新启动进程的方法 这条路贴在这里: 任何帮助都会很好 多谢各位 我正在用C语言开发控制台应用程序,以检查它是否正在运行,因此任何代码示例都会很好。A可以帮助
我找到了一种方法来检查SMTP服务器是否已启动并正在运行,但我还没有找到在进程崩溃时如何重新启动进程的方法 这条路贴在这里: 任何帮助都会很好 多谢各位 我正在用C语言开发控制台应用程序,以检查它是否正在运行,因此任何代码示例都会很好。A可以帮助您,因为它有启动和停止方法。查看msdn页面中的示例 另一个示例取自,它几乎就是您所需要的(只需替换服务名称)
也许我遗漏了什么,或者做了一些更改,但是当您在Windows 2012R2上安装SMTP服务时,没有专门的服务。因此,对于最新版本的Windows,上述建议不起作用 幸运的是,有一种方法可以更容易地做到这一点。Powershell:
([ADSI]'IIS://LOCALHOST/SMTPSVC/1').Start() #to start
([ADSI]'IIS://LOCALHOST/SMTPSVC/1').Stop() #to ... you guess
最奇怪的是,你通过广告控制smtp服务,但它是有效的。
当然,这应该被提升。
如果您有多个虚拟SMTP服务器,您可能需要首先通过索引或某些属性(例如,.ConnectionTimeout
)来标识您的服务器。在c中,您可以编写:
enum StatusVirtualServerSMTP
{
Started = 2,
Stopped = 4
}
DirectoryEntry dir = new DirectoryEntry("IIS://localhost/SMTPSVC/1");
if (Convert.ToInt32(dir.Properties["SERVERSTATE"].Value) == (int)StatusVirtualServerSMTP.Stopped)
{
dir.Properties["SERVERSTATE"].Value = (int)StatusVirtualServerSMTP.Started;
dir.CommitChanges();
}
“我找到了一种方法来检查SMTP服务器是否已启动并正在运行”。哪一个?此评论的问题可能没有给出答案。您想远程检查还是本地检查?是否要从同一域进行测试?我将在SMTP服务器运行的同一台服务器上本地检查并运行console应用程序。在这种情况下,a可以帮助您,因为它有启动和停止方法。查看msdn页面中的示例。由于问题被标记为“C”,有没有办法直接在C中执行此操作?(当然,除了从C#调用一行PowerShell之外,我想这很好,因为任何仍然使用IIS 6.0进行任何操作的人都可能对黑客有很高的容忍度:)等等。看看这里:这样的想法是,您可以
键入.GetTypeFromCLSID(“001677D0-FD16-11CE-ABC4-02608C9E7553”)
-->转换为动态-->执行操作。以下是接口定义:或p/invoke:是否仍要使用此路径?:)
enum StatusVirtualServerSMTP
{
Started = 2,
Stopped = 4
}
DirectoryEntry dir = new DirectoryEntry("IIS://localhost/SMTPSVC/1");
if (Convert.ToInt32(dir.Properties["SERVERSTATE"].Value) == (int)StatusVirtualServerSMTP.Stopped)
{
dir.Properties["SERVERSTATE"].Value = (int)StatusVirtualServerSMTP.Started;
dir.CommitChanges();
}