如何通过编程方式关闭或打开'Windows功能'
本文关键字:Windows 功能 编程 何通过 方式关 | 更新日期: 2023-09-27 18:13:45
目前,用户必须进入控制面板>程序>打开或关闭Windows功能,然后单击他们想要激活的功能的复选框。我想让他们能够从我的申请中做到这一点。
关于如何通过。net(最好是c#)自动化这个过程的任何想法?
如果您只针对较新的平台(>= Windows Vista),那么disc .exe是最新的实用程序;它取代了pkgmgr。
- http://technet.microsoft.com/en-us/library/dd799309 (WS.10) . aspx
- 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().