I'm trying to set an registry access rule on a remote machine:
using (RegistryKey localMachineKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, serverName))
{
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(ne开发者_如何学Cw RegistryAccessRule(userName, RegistryRights.FullControl, AccessControlType.Allow));
using (RegistryKey subKey = localMachineKey.CreateSubKey(registryKey))
{
subKey.SetValue(name, value);
subKey.SetAccessControl(rs);
}
}
this produces the following exception:
System.NotSupportedException: The supplied handle is invalid. This can happen when trying to set an ACL on an anonymous kernel object.
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
at System.Security.AccessControl.NativeObjectSecurity.Persist(SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
at System.Security.AccessControl.RegistrySecurity.Persist(SafeRegistryHandle hKey, String keyName)...
Does anyone know how to make this working? Thanks!
Using WinRM might be an option. How to access WinRM in C#
This link suggests that along with a bit more information:
http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/0beee366-ee8d-4052-b1b9-8ad9bf0f8ff0/
Part of the link suggests that it is not possible set this remotely. However, at the bottom, Shaka_01 mentions calling.SetAccessRuleProtection.
RegistryKey rk = RegistryKey.OpenRemoteBaseKey(...);
RegistrySecurity rs = rk.GetAccessControl(AccessControlSections.All);
rs.SetAccessRuleProtection(true, true); //this line you need to set ACL on a remote machines registry key.
精彩评论