C# 如何以编程方式启动IIS 6.0 SMTP虚拟服务器?

C# 如何以编程方式启动IIS 6.0 SMTP虚拟服务器?,c#,iis,smtp,C#,Iis,Smtp,我想知道如何以编程方式重新启动IIS 6.0 SMTP服务器 我安装的SMTP服务器偶尔会崩溃。我有几天没有注意到,但现在做任何事情都为时已晚 我想每隔30分钟左右设置一个计划任务,以测试SMTP服务器是否正在运行,如果没有,则计划任务将自动启动并备份 我找到了一种方法来检查SMTP服务器是否已启动并正在运行,但我还没有找到在进程崩溃时如何重新启动进程的方法 这条路贴在这里: 任何帮助都会很好 多谢各位 我正在用C语言开发控制台应用程序,以检查它是否正在运行,因此任何代码示例都会很好。A可以帮助

我想知道如何以编程方式重新启动IIS 6.0 SMTP服务器

我安装的SMTP服务器偶尔会崩溃。我有几天没有注意到,但现在做任何事情都为时已晚

我想每隔30分钟左右设置一个计划任务,以测试SMTP服务器是否正在运行,如果没有,则计划任务将自动启动并备份


我找到了一种方法来检查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();
            }