
This will provide Simple wrapper of IGroupPolicyObject: IGroupPolicyObject (gpedit.h) - Win32 apps | Microsoft Learn
Inspired by https://stackoverflow.com/a/22673417 (which is inspired by https://bitbucket.org/MartinEden/local-policy)
Links: Doxygen
Listing usage
Note: This must run on STA thread apartment!
var viewComputerConfiguration = true;
using (var gpo = new ComputerGroupPolicyObject(new GroupPolicyObjectSettings(loadRegistryInfo: true, readOnly: true)))
{
void Walk(RegistryKey key)
{
foreach (var subKeyName in key.GetSubKeyNames())
{
using (var subKey = key.OpenSubKey(subKeyName))
{
Walk(subKey);
}
}
foreach (var valueName in key.GetValueNames())
{
var kind = key.GetValueKind(valueName);
var data = key.GetValue(valueName, "", RegistryValueOptions.DoNotExpandEnvironmentNames);
Console.WriteLine($"{key.Name.TrimStart('\\')}\\{valueName} = {data}");
}
}
Walk(registryKey);
}
GroupPolicySection
Definition: GroupPolicySection.cs:10
Output:
SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting\DontShowUI = 0
Modification usage
Note: This must run on STA thread apartment! Note: This must run on Administrator privileges!
var modifyComputerConfiguration = true;
using (var gpo = new ComputerGroupPolicyObject(new GroupPolicyObjectSettings(loadRegistryInfo: true, readOnly: false)))
{
RegistryKeyHelper.SetPolicySetting(
registryKey,
@"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU",
@"AlwaysAutoRebootAtScheduledTime",
1,
RegistryValueKind.DWord
);
RegistryKeyHelper.SetPolicySetting(
registryKey,
@"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU",
@"AlwaysAutoRebootAtScheduledTimeMinutes",
15,
RegistryValueKind.DWord
);
gpo.Save();
}
Run on STA thread apartment
Main:
[STAThread()]
static int Main(string[] args)
{
}
new Thread:
var t = new Thread(() =>
{
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
NUnit:
[Test]
[Apartment(ApartmentState.STA)]
public void ListUsage()
{
}