C++ Windows Server 2016用CMD命令行安装IIS角色和功能组件

来源:互联网 发布:中国儿童编程网 编辑:程序博客网 时间:2024/05/22 15:00
      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 ServicestrRunCmd = _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)。我有个疑问就是总觉得有点不合理,在此供大家学习,不足之处还望大家提出。



阅读全文
0 0
原创粉丝点击