如何自动开启 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的主要内容,如果未能解决你的问题,请参考以下文章