【问题标题】:How to automatically turn on IIS如何自动开启 IIS
【发布时间】:2018-05-22 13:31:00
【问题描述】:

请问我有一个需要 IIS 才能运行的应用程序,现在需要在 Windows 控制面板中手动打开 IIS。但我想避免这个过程并自动打开 IIS 我该怎么做。谢谢

【问题讨论】:

  • 您是在说开启 IIS Windows 功能吗?是你说的控制面板吗?如果不是,是哪一个?你尝试这样做的“切入点”是什么?某种形式的安装程序包? (如果是,您使用什么技术来构建它?)
  • 是的,我的意思是在控制面板中打开 IIs 窗口功能。我正在尝试从安装程序包中做到这一点。我正在使用点网框架来构建它。
  • 技术方面,我指的是 Visual Studio 安装项目、Wix、InstallShield 等。您在什么中创作 setup 项目?
  • 好的,我正在使用 Wix。
  • 类似问题想install MSMQ via WIX。 IIS 的特定包会发生变化,但应该适用一般技术。

标签: asp.net .net iis


【解决方案1】:

IIS 被实现为 Windows 服务。所以唯一需要做的是确保 W3SVC 的Startup type 设置为Automatic。它默认设置为自动,因此您的问题暗示有人已将其更改为其他选项之一。

所以打开服务并查找World Wide Web Publishing Service。然后双击它,您将看到它的属性。从Startup type 下拉列表中选择Automatic。重启你的电脑。 IIS 将自动启动。

更新

根据 OP 的评论,我认为重新配置服务是必要的。

不幸的是,没有托管类来更改服务启动类型。您可以通过 P/Invoke 并调用本机 Windows API。另一种选择是利用 WMI。但最快的方法是从您的应用程序安装程序中生成一个特权cmd.exe 并运行以下命令:

sc config w3svc start=auto

但是,这不是一个万无一失的解决方案,因为其他人以后可能会再次将其更改为 demand 甚至 disabled

如果您正在寻找一种在应用程序安装程序执行时启动服务的机制,您可能需要ServiceController 类。它可以启动服务,但不能更改其启动类型。这是official documentation

所以你可以在你的代码中做这样的事情:

using (var w3cvs = new ServiceController("W3Svc"))
{
    if (w3cvs.Status == ServiceControllerStatus.Stopped)
    {
        w3cvs.Start();                    
    }
}

【讨论】:

  • 由于自动是安装 IIS 后此服务的默认启动模式,我正在努力弄清楚这是否是 OP 的意思,或者如果他们在我的 cmets 中谈论 安装 IIS,或其他。
  • 从不同的设备上测试,iis服务被关闭。所以我正在寻找一种通过应用程序安装程序包打开它的方法。无需进入 WWW 发布服务
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2016-03-03
  • 2018-06-13
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多