通过 C# 代码在远程机器上启动和停止 IIS [关闭]

Posted

技术标签:

【中文标题】通过 C# 代码在远程机器上启动和停止 IIS [关闭]【英文标题】:Start and Stop IIS on remote machine through C# code [closed] 【发布时间】:2013-07-24 10:32:40 【问题描述】:

我需要在远程机器上停止 IIS,然后做一些工作,然后在工作完成后再次启动 IIS 服务。我正在尝试使用 C# 代码来做到这一点。我已经看到一些关于通过代码在远程机器上启动 IIS 的类似问题。但我无法从中得到任何可行的解决方案。一些关于如何进行启动和停止操作的清晰 C# 代码会很有帮助。

【问题讨论】:

你有什么尝试吗? 是的,有这个解决方案关于启动命令提示符作为使用此命令执行 IISReset 的进程:IISRESET \\RemoteServerMachineName /stop 你想用 C# 写东西吗?或者你只是想要一个命令行工具? IISRESET 将重置同一服务器上的 IIS 服务。您也可以执行 iisreset [COMPUTERNAME] /restart 从另一台计算机重新启动,但这可能需要更改防火墙。我不清楚你是在寻找我在下面给你的 c# 解决方案还是命令行/powershell 脚本。 Hi Mark C# 代码会更好。但是您答案中的代码是用于在本地机器上启动服务,对吗?我需要在远程机器上执行此操作。对此有何建议? 【参考方案1】:

Microsoft.Web.Administration 命名空间拥有管理 IIS 所需的一切。查看:http://msdn.microsoft.com/en-us/library/microsoft.web.administration%28VS.90%29.aspx。

但是,如果您只想停止和启动服务,您可以使用 Service.Controller 管理您的服务

 ServiceController service = new ServiceController(serviceName);
 TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
 service.Start();
 service.WaitForStatus(ServiceControllerStatus.Running, timeout);

Service.Controller 课程页面应该包含您需要的所有信息。找到它,http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx

这是一个可用于启动服务的完整示例:

public static void StartService(string serviceName, int timeoutMilliseconds)

  ServiceController service = new ServiceController(serviceName);
  try
  
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

    service.Start();
    service.WaitForStatus(ServiceControllerStatus.Running, timeout);
  
  catch
  
    // ...
  

查看上面的链接以获取更多文档。

您可以按如下方式连接到远程服务器:

ServiceController svc =  new ServiceController("Service", "COMPUTERNAME");

如果您在远程服务器上需要一组不同的权限,则需要做更多的工作。看到这个问题,Starting remote Windows services with ServiceController and impersonation。

【讨论】:

Hi Mark C# 代码会更好。但是上面的代码是为了在本地机器上启动服务,对吧?我需要在远程机器上执行此操作。对此有何建议? 我刚刚编辑了我的示例,其中包含在另一台服务器上调用 ServiceController 所需的代码。当然,您必须确保您使用的帐户在目标服务器上具有所需的权限。 我想我没有权限这样做。我收到“无法在计算机上打开 iisadmin 服务”异常。如果我确实拥有有权启动和停止 IIS 服务的用户帐户的凭据,该怎么办。如何在代码中指定这些凭据? 您对如何在此标记的代码中指定用户帐户凭据有任何想法吗? 有了权限,事情就变得复杂多了。有关更多信息,请参阅此答案***.com/questions/8581931/…【参考方案2】:

解决方案 A:

您可以创建一个 .bat 文件运行时,例如:

# for stopping
iisreset -stop

# for starting
iisreset -start

然后使用PsExec在远程机器上执行。

解决方案 B: 直接启动或停止“IISADMIN”服务。要管理远程服务,您可以使用以下链接:

Monitor and Manage Services on Remote Machines Using the ServiceController in C# to stop and start a service

祝你好运;)

【讨论】:

以上是关于通过 C# 代码在远程机器上启动和停止 IIS [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同域中的远程服务器上启动或停止IIS-8.5网站

通过 Powershell 在远程机器上更改 IIS 网站的物理路径

访问远程机器上的文件

如何使用 PowerShell 在 IIS 中停止和启动各个网站?

无法使用 c# 以编程方式访问 iis 远程服务器

XAMPP、Apache 和 IIS 在同一台机器上