您的位置:首页 > 编程语言 > C语言/C++

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重要组件图:





代码如下:

#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)。我有个疑问就是总觉得有点不合理,在此供大家学习,不足之处还望大家提出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iis windows server cmd