如何通过编程方式关闭或打开'Windows功能'

本文关键字:Windows 功能 编程 何通过 方式关 | 更新日期: 2023-09-27 18:13:45

目前,用户必须进入控制面板>程序>打开或关闭Windows功能,然后单击他们想要激活的功能的复选框。我想让他们能够从我的申请中做到这一点。

关于如何通过。net(最好是c#)自动化这个过程的任何想法?

如何通过编程方式关闭或打开'Windows功能'

如果您只针对较新的平台(>= Windows Vista),那么disc .exe是最新的实用程序;它取代了pkgmgr。

  1. http://technet.microsoft.com/en-us/library/dd799309 (WS.10) . aspx
  2. http://msdn.microsoft.com/en-us/library/dd371719 (v = vs.85) . aspx

示例调用(运行所有必需的特性):

dism.exe /online /enable-feature /featurename:IIS-WebServerRole

查找一个特性,使用

dism.exe /online /get-features | find “Tablet”

使用Microsoft。Dism

您也可以使用Microsoft.Dism Nuget Package。它是dismapi.dll的包装器,也被powershell cmdlet使用。

安装

要通过包管理器控制台安装,请使用。

Install-Package Microsoft.Dism

通过dotnet命令行接口安装。

dotnet add package Microsoft.Dism
文档

NuGet包有很好的xml文档。也可以查看他们的Wiki获取更多信息。以及microsoft提供的DISM API参考文档。

例子

获取所有已安装特性的列表:

IEnumerable<string> GetInstalledFeatures()
{
    var installedFeatures = new List<string>();
    DismApi.Initialize(DismLogLevel.LogErrorsWarningsInfo);
    try
    {
        using var session = DismApi.OpenOnlineSessionEx(new DismSessionOptions() { });
        var features = DismApi.GetFeatures(session);
        foreach (var feature in features)
        {
            if (feature.State == DismPackageFeatureState.Installed)
                installedFeatures.Add(feature.FeatureName);
        }
    }
    finally
    {
        DismApi.Shutdown();
    }
    return installedFeatures;
}

启用某个功能:

void EnableFeature(string featureName)
{
    DismApi.Initialize(DismLogLevel.LogErrorsWarningsInfo);
    try
    {
        using var session = DismApi.OpenOnlineSession();
        var (left, top) = Console.GetCursorPosition();
        DismApi.EnableFeature(session, featureName, false, true, null, progress =>
        {
            Console.SetCursorPosition(left, top);
            Console.Write($"{progress.Total} / {progress.Current}");
        });
        Console.WriteLine();
    }
    finally
    {
        DismApi.Shutdown();
    }
}

我使用IIS使用NSIS:

$Sysdir'pkgmgr.exe /n:$Temp'iis7Unattend.xml

你可以从你的c#程序中调用pkgmgr程序,通常你会创建一个unattend文件,其中包含pkgmgr使用该特性的指令。

你需要使用

 System.Diagnostics.Process.Start().