C++ Windows Server 2016用CMD命令行安装IIS角色和功能组件
2017-08-04 11:13
537 查看
Windows Server 2016数据中心纯净版上安装IIS1.0版本的组件,Windows Server 2016和Windows Server
2012版本,他们的组件是没有多大区别的,但是安装的方式有所差异,也就是安装的顺序比较怪异。由于在08和12版本上面安装都没有问题,理所当然我就以12版本的IIS安装方式去安装16版本的,既然是安装IIS,那么最重要的当然是安装【服务器角色】-->【Web服务器(IIS)】下的部分组件。
但是问题来了,因为16版本的IIS10.0的组件,如果安装常规先安装:
【功能】-->【.NET Framework 3.5功能】
【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 3.5]/[ASP.NET 3.5]
那么[.Net Extensibility 3.5]/[ASP.NET 3.5]是无法安装的,为什么?我也不知道!o_X ,但是后来经过我一个上午的安装卸载安装卸载(当然这一切都是在cmd命令行下进行的)最后发现了问题,那就是[.Net Extensibility 3.5]/[ASP.NET 3.5]和[.Net Extensibility 4.6]/[ASP.NET 4.6]的安装都需要依赖【功能】-->【.NET
Framework 4.6功能】-->[ASP.NET 4.6]组件。假设这四个都已经安装了,如果卸载掉【功能】-->【.NET Framework 4.6功能】-->[ASP.NET 4.6]组件,那么这四个组件也将被卸载掉,由此可知他们是依赖[ASP.NET 4.6]组件的。
所以,我整理的安装顺序是这样的:
(1)【功能】-->【.NET Framework 3.5功能】
【.NET Framework 3.5功能】-->[.NET Frameword 3.5];
(2)【功能】-->【.NET Framework 4.5功能】
【.NET Framework 3.5功能】-->[.NET Frameword 4.6]
【.NET Framework 3.5功能】-->[ASP.NET 4.6];
(3)【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 3.5]/[ASP.NET 3.5];
(4)【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 4.6]/[ASP.NET 4.6];
.NET重要组件图:
代码如下:
//IIS的组件结构代码:
WebServerRole web服务角色
IIS-WebServer web服务器
IIS-CommonHttpFeatures 常见HTTP功能
IIS-StaticContent 静态内容
IIS-DefaultDocument 默认文档
IIS-DirectoryBrowsing 目录浏览
IIS-HttpErrors HTTP错误
IIS-HttpRedirect HTTP重定向
IIS-ApplicationDevelopment 应用程序
IIS-ASP ASP
IIS-CGI CGI
IIS-ASPNET ASP.NET3.5
IIS-NetFxExtensibility .NET Extensibility3.5
IIS-ASPNET45 ASP.NET4.5
IIS-NetFxExtensibility45 .NET Extensibility4.5
NetFx4Extended-ASPNET45
IIS-ISAPIFilter ISAPI筛选器
IIS-ISAPIExtensions ISAPI扩展
IIS-HealthAndDiagnostics 运行状态和诊断
IIS-HttpLogging HTTP日志记录
IIS-LoggingLibraries 日志记录工具
IIS-RequestMonitor 请求监控器
IIS-HttpTracing 跟踪
IIS-CustomLogging 自定义日志
IIS-ODBCLogging ODBC日志记录
IIS-Security 安全性
IIS-BasicAuthentication 基本身份验证
IIS-WindowsAuthentication Windows身份验证
IIS-DigestAuthentication 摘要式身份验证
IIS-ClientCertificateMappingAuthentication 客户端证书映射身份验证
IIS-IISCertificateMappingAuthentication IIS证书映射身份验证
IIS-URLAuthorization URL授权
IIS-RequestFiltering 请求筛选
IIS-IPSecurity IP和域限制
IIS-Performance 性能
IIS-HttpCompressionStatic 静态内容压缩
IIS-HttpCompressionDynamic 动态内容压缩
IIS-WebServerManagementTools 管理工具
IIS-ManagementConsole IIS管理控制台
IIS-ManagementScriptingTools IIS 管理脚本和工具
IIS-ManagementService 管理服务
IIS-FTPServer FTP服务器
IIS-FTPSvc FTP服务
IIS-FTPExtensibility FTP扩展
NetFx3ServerFeatures .NET Framework 3.5功能
NetFx3 .NET Frameword 3.5
NetFx4ServerFeatures .NET Frameword 4.6功能
NetFx4 .NET Frameword 4.6
NetFx4Extended-ASPNET45 ASP.NET 4.6
WAS-WindowsActivationService Windows Process Activation Service
WAS-ProcessMode 进程模型
WAS-NetFxEnvironment .NET Environment 3.5
WAS-ConfigurationAPI 配置 API
使用的是 pkgmgr的安装方式,其实用dism也行。在此提供一个方法获取这些角色和功能的命令代码, 在cmd.exe下或者Windows PowerShell.exe下,查看组件是否安装及组件角色和功能代码:
(1)进入 Windows PowerShell.exe 输入:Import-Module ServerManager 回车执行;Get-WindowsFeature 回车执行;
(2)进入 Windows PowerShell.exe 输入:dism /Online /Get-Features 回车执行;
(3)进入 cmd.exe 输入:dism /Online /Get-Features 回车执行。
这些安装都是在cmd下进行的,完整的安装就如代码上的,有图的部分知识要求注意的安装顺序,请注意最终以代码为主。好了Windows Server 2016的IIS10.0组件安装就是这些了(我个人需要就这个么多 o_X)。我有个疑问就是总觉得有点不合理,在此供大家学习,不足之处还望大家提出。
2012版本,他们的组件是没有多大区别的,但是安装的方式有所差异,也就是安装的顺序比较怪异。由于在08和12版本上面安装都没有问题,理所当然我就以12版本的IIS安装方式去安装16版本的,既然是安装IIS,那么最重要的当然是安装【服务器角色】-->【Web服务器(IIS)】下的部分组件。
但是问题来了,因为16版本的IIS10.0的组件,如果安装常规先安装:
【功能】-->【.NET Framework 3.5功能】
【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 3.5]/[ASP.NET 3.5]
那么[.Net Extensibility 3.5]/[ASP.NET 3.5]是无法安装的,为什么?我也不知道!o_X ,但是后来经过我一个上午的安装卸载安装卸载(当然这一切都是在cmd命令行下进行的)最后发现了问题,那就是[.Net Extensibility 3.5]/[ASP.NET 3.5]和[.Net Extensibility 4.6]/[ASP.NET 4.6]的安装都需要依赖【功能】-->【.NET
Framework 4.6功能】-->[ASP.NET 4.6]组件。假设这四个都已经安装了,如果卸载掉【功能】-->【.NET Framework 4.6功能】-->[ASP.NET 4.6]组件,那么这四个组件也将被卸载掉,由此可知他们是依赖[ASP.NET 4.6]组件的。
所以,我整理的安装顺序是这样的:
(1)【功能】-->【.NET Framework 3.5功能】
【.NET Framework 3.5功能】-->[.NET Frameword 3.5];
(2)【功能】-->【.NET Framework 4.5功能】
【.NET Framework 3.5功能】-->[.NET Frameword 4.6]
【.NET Framework 3.5功能】-->[ASP.NET 4.6];
(3)【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 3.5]/[ASP.NET 3.5];
(4)【服务器角色】-->【Web服务器(IIS)】-->【Web服务器】-->【应用程序开发】-->[.Net Extensibility 4.6]/[ASP.NET 4.6];
.NET重要组件图:
代码如下:
#include "stdafx.h" #include <windows.h> #include <tchar.h> #include <string> #include <iostream> #include <Shlwapi.h> #include "process.h" #pragma comment(lib, "Shlwapi.lib") using namespace std; bool RunSysCmd(const wstring& strcmd); wstring getSystemDirectory(); BOOL IsWow64(); bool WinServ2016_IISInstall(); int _tmain(int argc, _TCHAR* argv[]) { bool bRet = false; bRet = WinServ2016_IISInstall(); system("pause"); return 0; } bool RunSysCmd(const wstring& strcmd) { bool suc; wstring stdDirectory = getSystemDirectory() + _T("Windows\\System32\\"); if (IsWow64()) { PVOID OldValue = NULL; Wow64DisableWow64FsRedirection(&OldValue); SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = _T("runas"); ShExecInfo.lpFile = _T("cmd.exe"); ShExecInfo.lpParameters = strcmd.c_str(); ShExecInfo.lpDirectory = stdDirectory.c_str(); ShExecInfo.nShow = SW_HIDE; ShExecInfo.hInstApp = NULL; suc = ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess, INFINITE); Wow64RevertWow64FsRedirection(OldValue); } else { SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = _T("open"); ShExecInfo.lpFile = _T("cmd.exe"); ShExecInfo.lpParameters = strcmd.c_str(); ShExecInfo.lpDirectory = stdDirectory.c_str(); ShExecInfo.nShow = SW_HIDE; ShExecInfo.hInstApp = NULL; suc = ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess, INFINITE); } return suc; } wstring getSystemDirectory() { wstring wstr = _T(""); int size = ::GetSystemDirectory(NULL, 0); wchar_t *path = new wchar_t[size]; if (::GetSystemDirectory(path, size) != 0) { wstr = path; } delete[] path; return wstr; } BOOL IsWow64() { typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL bIsWow64 = FALSE; fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(_T("kernel32")), "IsWow64Process"); if (NULL != fnIsWow64Process){ fnIsWow64Process(GetCurrentProcess(), &bIsWow64); } return bIsWow64; } bool WinServ2016_IISInstall() { std::cout << "start install IIS comm"; bool bRet = false; std::wstring strRunCmd = _T("/c start /w pkgmgr /iu:IIS-WebServerRole;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-WebServer;"); bRet = RunSysCmd(strRunCmd); //常见HTTP功能 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-CommonHttpFeatures;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-StaticContent;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-DefaultDocument;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-DirectoryBrowsing;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpErrors;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpRedirect;"); bRet = RunSysCmd(strRunCmd); //应用程序开发 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ApplicationDevelopment;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:NetFx3ServerFeatures;");//这个安装特别慢!!!最好冲杯咖啡核一下等待 bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:NetFx3;");//注意:只有父功能开启了,子功能才能安装,否则,无法安装 bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:NetFx4ServerFeatures;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:NetFx4;");//注意:只有父功能开启了,子功能才能安装,否则,无法安装 bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:NetFx4Extended-ASPNET45;");//注意:必须先安装此组件,下面的3、4组件才能安装 bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-NetFxExtensibility;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ASPNET;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-NetFxExtensibility45;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ASPNET45;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-CGI;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ASP;IIS-ISAPIExtensions;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ISAPIFilter;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ServerSideIncludes;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-WebSockets;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ApplicationInit;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ASPNET;");//再次安装,保障一点 bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ASPNET45;");//再次安装,保障一点 bRet = RunSysCmd(strRunCmd); //运行状态(健康)和诊断 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HealthAndDiagnostics;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpLogging;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-LoggingLibraries;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-RequestMonitor;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpTracing;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-CustomLogging;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ODBCLogging;"); bRet = RunSysCmd(strRunCmd); //安全性 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-Security;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-BasicAuthentication;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-CertProvider;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-WindowsAuthentication;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-DigestAuthentication;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ClientCertificateMappingAuthentication;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-IISCertificateMappingAuthentication;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-URLAuthorization;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-RequestFiltering;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-IPSecurity;"); bRet = RunSysCmd(strRunCmd); //性能 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-Performance;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpCompressionStatic;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-HttpCompressionDynamic;"); bRet = RunSysCmd(strRunCmd); //管理工具 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-WebServerManagementTools;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ManagementConsole;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ManagementScriptingTools;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-ManagementService;"); bRet = RunSysCmd(strRunCmd); //FTP服务器 strRunCmd = _T("/c start /w pkgmgr /iu:IIS-FTPServer;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-FTPSvc;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:IIS-FTPExtensibility;"); bRet = RunSysCmd(strRunCmd); //Windows process Activation Service strRunCmd = _T("/c start /w pkgmgr /iu:WAS-WindowsActivationService;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:WAS-ProcessModel;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:WAS-NetFxEnvironment;"); bRet = RunSysCmd(strRunCmd); strRunCmd = _T("/c start /w pkgmgr /iu:WAS-ConfigurationAPI;"); bRet = RunSysCmd(strRunCmd); return bRet; }
//IIS的组件结构代码:
WebServerRole web服务角色
IIS-WebServer web服务器
IIS-CommonHttpFeatures 常见HTTP功能
IIS-StaticContent 静态内容
IIS-DefaultDocument 默认文档
IIS-DirectoryBrowsing 目录浏览
IIS-HttpErrors HTTP错误
IIS-HttpRedirect HTTP重定向
IIS-ApplicationDevelopment 应用程序
IIS-ASP ASP
IIS-CGI CGI
IIS-ASPNET ASP.NET3.5
IIS-NetFxExtensibility .NET Extensibility3.5
IIS-ASPNET45 ASP.NET4.5
IIS-NetFxExtensibility45 .NET Extensibility4.5
NetFx4Extended-ASPNET45
IIS-ISAPIFilter ISAPI筛选器
IIS-ISAPIExtensions ISAPI扩展
IIS-HealthAndDiagnostics 运行状态和诊断
IIS-HttpLogging HTTP日志记录
IIS-LoggingLibraries 日志记录工具
IIS-RequestMonitor 请求监控器
IIS-HttpTracing 跟踪
IIS-CustomLogging 自定义日志
IIS-ODBCLogging ODBC日志记录
IIS-Security 安全性
IIS-BasicAuthentication 基本身份验证
IIS-WindowsAuthentication Windows身份验证
IIS-DigestAuthentication 摘要式身份验证
IIS-ClientCertificateMappingAuthentication 客户端证书映射身份验证
IIS-IISCertificateMappingAuthentication IIS证书映射身份验证
IIS-URLAuthorization URL授权
IIS-RequestFiltering 请求筛选
IIS-IPSecurity IP和域限制
IIS-Performance 性能
IIS-HttpCompressionStatic 静态内容压缩
IIS-HttpCompressionDynamic 动态内容压缩
IIS-WebServerManagementTools 管理工具
IIS-ManagementConsole IIS管理控制台
IIS-ManagementScriptingTools IIS 管理脚本和工具
IIS-ManagementService 管理服务
IIS-FTPServer FTP服务器
IIS-FTPSvc FTP服务
IIS-FTPExtensibility FTP扩展
NetFx3ServerFeatures .NET Framework 3.5功能
NetFx3 .NET Frameword 3.5
NetFx4ServerFeatures .NET Frameword 4.6功能
NetFx4 .NET Frameword 4.6
NetFx4Extended-ASPNET45 ASP.NET 4.6
WAS-WindowsActivationService Windows Process Activation Service
WAS-ProcessMode 进程模型
WAS-NetFxEnvironment .NET Environment 3.5
WAS-ConfigurationAPI 配置 API
使用的是 pkgmgr的安装方式,其实用dism也行。在此提供一个方法获取这些角色和功能的命令代码, 在cmd.exe下或者Windows PowerShell.exe下,查看组件是否安装及组件角色和功能代码:
(1)进入 Windows PowerShell.exe 输入:Import-Module ServerManager 回车执行;Get-WindowsFeature 回车执行;
(2)进入 Windows PowerShell.exe 输入:dism /Online /Get-Features 回车执行;
(3)进入 cmd.exe 输入:dism /Online /Get-Features 回车执行。
这些安装都是在cmd下进行的,完整的安装就如代码上的,有图的部分知识要求注意的安装顺序,请注意最终以代码为主。好了Windows Server 2016的IIS10.0组件安装就是这些了(我个人需要就这个么多 o_X)。我有个疑问就是总觉得有点不合理,在此供大家学习,不足之处还望大家提出。
相关文章推荐
- C++ Windows Server 2016上修改注册表IIS10.0降级安装PHPManager
- C++ Windows Server 2008 以上版本中IIS安装FastCGI组件
- windows server 2008下安装SQL SERVER 2005出现IIS功能要求警告解决方案
- 阿里云学生优惠Windows Server 2012 R2无法安装IIS等组件的解决办法
- windows server 2008下安装SQL SERVER 2005出现IIS功能要求警告解决方案
- Windows Server 2003上安装IIS组件
- Windows Server 2016 安装 IIS 服务时提示指定备用源路径 3ff8
- 【转】Windows Server 2016 安装 IIS 服务时提示指定备用源路径
- Windows Server 2016-命令行Ntdsutil迁移FSMO角色
- 03-Windows Server 2016 IIS的安装与配置
- windows server 2008下安装SQL SERVER 2005出现IIS功能要求警告解决方案
- Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
- windows2008 R2 角色 服务 功能 iis组件 名称
- windows server 2008下安装SQL SERVER 2005出现IIS功能要求警告解决方案
- Windows Server 2003上安装IIS组件
- windows server 2016 安装iis
- 阿里云学生优惠Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
- windows server 2008下安装SQL SERVER 2005出现IIS功能要求警告解决方案
- Windows Server 2016-FSMO操作主机角色介绍
- 在CMD命令行和PowerShell中实现复制粘贴功能