如何自动开启 IIS

Posted

技术标签:

【中文标题】如何自动开启 IIS【英文标题】:How to automatically turn on 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 的特定包会发生变化,但应该适用一般技术。 【参考方案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 发布服务

以上是关于如何自动开启 IIS的主要内容,如果未能解决你的问题,请参考以下文章

win7开启iis后如何配置?

windows server 2012 设置IIS服务器定时自动重启的方法

请开启PHP的GMP支持

IIS开启Gzip压缩

[奥塔在线]IIS Express如何开启HTPPS访问

[奥塔在线]IIS Express如何开启HTPPS访问