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

      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)。我有个疑问就是总觉得有点不合理,在此供大家学习,不足之处还望大家提出。



  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
安装 MySQL 之前,您需要确保已经安装了 .NET Framework 4.6.2 以及 Visual C++ Redistributable for Visual Studio 2015。 以下是在 Windows Server 2016安装 MySQL 的步骤: 1. 下载 MySQL 安装文件,可以从官方网站下载:https://dev.mysql.com/downloads/mysql/。 2. 双击安装文件,然后选择“Custom”选项。 3. 选择您需要安装的 MySQL 组件。如果您只想安装 MySQL Server,那么只需选择“MySQL Server”即可。 4. 在“Installation Options”页面上,您可以选择 MySQL Server安装位置,以及配置 MySQL Server 的实例名称和端口号等信息。 5. 在“Accounts and Roles”页面上,您需要指定 MySQL Server 的管理员账户和密码。 6. 在“Type and Networking”页面上,您可以选择 MySQL Server 的网络配置,比如是否允许远程访问等。 7. 在“Authentication Method”页面上,您可以选择 MySQL Server 的身份验证方法。默认情况下,MySQL Server 使用“Legacy Authentication Method”,但建议您使用“Strong Password Encryption”方法。 8. 完成上述设置后,单击“Execute”按钮开始安装 MySQL Server。 9. 安装完成后,您可以通过 MySQL Workbench 或者命令行工具来管理 MySQL Server。 注意:在安装 MySQL Server 时,请务必注意以下几点: - 确保您的服务器满足 MySQL Server 的最低系统要求; - 确保您在安装过程中选择了正确的组件; - 确保您在安装过程中设置了安全的管理员账户和密码; - 确保您在安装过程中设置了适当的网络配置和身份验证方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值