以编程方式启用(安装)IIS

13
有时候电脑上没有IIS,可能是禁用了或者没有安装。在这种情况下,我需要按照以下步骤启用它。
我正在尝试创建一个应用程序,检查IIS是否已启用(安装),如果没有,则会启用(安装)它。
我尝试使用此处的.msi文件安装IIS,但它要求我在安装之前按照以下步骤进行操作。
我尝试使用Advanced Installer,但显然它只安装了IIS 8.0 Express,而仍然保持IIS禁用状态。

enter image description here

我需要以编程方式启用IIS,应该怎么做?如果需要运行IIS安装文件来完成操作,也可以接受(但我找不到正确的文件)。

4个回答

20

您可以通过命令行安装 IIS。以下命令将在 Windows 8 上安装 IIS(您可以编辑此命令以添加/删除某些功能。这只是我过去使用过的一个命令):

PkgMgr:

start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-NetFxExtensibility45;IIS-ASPNET45;IIS-NetFxExtensibility;IIS-ASPNET;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-RequestMonitor;IIS-Security;IIS-RequestFiltering;IIS-HttpCompressionStatic;IIS-WebServerManagementTools;IIS-ManagementConsole;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI

DISM:

START /WAIT DISM /Online /Enable-Feature /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-ASP /FeatureName:IIS-ASPNET /FeatureName:IIS-BasicAuthentication /FeatureName:IIS-CGI /FeatureName:IIS-ClientCertificateMappingAuthentication /FeatureName:IIS-CommonHttpFeatures /FeatureName:IIS-CustomLogging /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DigestAuthentication /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-FTPExtensibility /FeatureName:IIS-FTPServer /FeatureName:IIS-FTPSvc /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HostableWebCore /FeatureName:IIS-HttpCompressionDynamic /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-HttpErrors /FeatureName:IIS-HttpLogging /FeatureName:IIS-HttpRedirect /FeatureName:IIS-HttpTracing /FeatureName:IIS-IIS6ManagementCompatibility /FeatureName:IIS-IISCertificateMappingAuthentication /FeatureName:IIS-IPSecurity /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-LegacyScripts /FeatureName:IIS-LegacySnapIn /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-ManagementConsole /FeatureName:IIS-ManagementScriptingTools /FeatureName:IIS-ManagementService /FeatureName:IIS-Metabase /FeatureName:IIS-NetFxExtensibility /FeatureName:IIS-ODBCLogging /FeatureName:IIS-Performance /FeatureName:IIS-RequestFiltering /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-ServerSideIncludes /FeatureName:IIS-StaticContent /FeatureName:IIS-URLAuthorization /FeatureName:IIS-WebDAV /FeatureName:IIS-WebServer /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-WebServerRole /FeatureName:IIS-WindowsAuthentication /FeatureName:IIS-WMICompatibility /FeatureName:WAS-ConfigurationAPI /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ProcessModel /FeatureName:WAS-WindowsActivationService

在 C# 中,您可以创建一个执行此命令的进程:

string command = "the above command";
ProcessStartInfo pStartInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
Process p = new Process();
p.StartInfo = pStartInfo;
p.Start();

1
公平的观点,但我发现使用DISM安装IIS时需要重新启动机器。如果编程方式安装IIS是为了避免手动安装的麻烦(似乎是这种情况),那么每次运行命令都需要重启机器不是一个理想的选择。我还没有找到一种不需要重新启动的通过DISM安装IIS的方法,但如果有的话,我想知道。 - Oliver Nicholls
你是否已经通过了/NoRestart开关? - Christopher Painter
是的,它只是在工具运行后抑制了“现在要重新启动吗?y/n”的消息,但在启用IIS之前仍需要重新启动。 - Oliver Nicholls
我会选择重新启动。Windows 推迟操作系统级别的配置,这可能是必要的。当我安装 IIS 时,通常是服务器,所以我无论如何都想重新启动,以确保像打补丁、GPO、SCCM 循环等所有操作都能运行。我完全赞成在可能的情况下合并和避免重新启动,但是 IIS 对机器来说是一个相当大的改变。 - Christopher Painter
1
同样,为了完整起见,我也会在我的原始答案中包含DISM命令。 - Oliver Nicholls
显示剩余3条评论

1
您在问题中标记了InstallShield,因此我提到后续版本的InstallShield支持启用Windows功能: 在Suite/Advanced UI安装期间启用Windows角色和功能 话虽如此,我通常不喜欢这样做,因为您真正干扰了PC的配置。我更喜欢编写检查,以确保已安装所需的功能,并在未安装时阻止。
另一个想法是ASP.NET 5.0现在支持自托管,过去的其他技术(如WCF)也支持自托管。简单地放弃对IIS的需求可能是有意义的,从而解决该问题。

1
关于您使用Advanced Installer的经验。由于您使用了我们预定义的先决条件支持,因此最终安装了IIS Express。您应该使用预定义的支持来安装Windows功能包
使用此支持,您可以轻松选择要启用哪个操作系统功能,并设置自定义条件。在我们的YouTube频道上,您可以找到示例/教程:

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接