C#中目录的组权限
Group Permission for Directory in C#
我正在使用控制台应用程序 visual studio 2012 为目录创建组权限,但出现错误 "Some or all identity references could not be translated."
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CreateDirectory(@"C:\TestDirectory", @"NAVEEN\IIS_IUSRS");
}
public static void CreateDirectory(string DirectoryName, string UserAccount)
{
if (!System.IO.Directory.Exists(DirectoryName))Directory.CreateDirectory(DirectoryName);
AddUsersAndPermissions(DirectoryName, UserAccount, FileSystemRights.FullControl, AccessControlType.Allow);
}
public static void AddUsersAndPermissions(string DirectoryName, string UserAccount, FileSystemRights UserRights, AccessControlType AccessType)
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(DirectoryName);
DirectorySecurity dirSecurity = directoryInfo.GetAccessControl();
dirSecurity.AddAccessRule(new enter code hereFileSystemAccessRule(UserAccount, UserRights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessType));
directoryInfo.SetAccessControl(dirSecurity);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
我已经找到了我的问题的解决方案。
我的本地没有 Active Directory 组。
DirectorySecurity、AddAccessRule 仅适用于 Active Directory 组,因此
在客户端服务器上,我使用此关键字从 sql 端执行控制台应用程序:“xp_cmdshell”,然后在 Active 中创建了一个目录目录组 并且当时没有收到 ant 类型的错误。
将PC名称从组中移除,只需要"IIS_USRS".
通过这一单一更改,以下代码可以正常运行。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CreateDirectory(@"C:\TestDirectory", @"IIS_IUSRS");
}
public static void CreateDirectory(string DirectoryName, string UserAccount)
{
if (!System.IO.Directory.Exists(DirectoryName)) Directory.CreateDirectory(DirectoryName);
AddUsersAndPermissions(DirectoryName, UserAccount, FileSystemRights.FullControl, AccessControlType.Allow);
}
public static void AddUsersAndPermissions(string DirectoryName, string UserAccount, FileSystemRights UserRights, AccessControlType AccessType)
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(DirectoryName);
DirectorySecurity dirSecurity = directoryInfo.GetAccessControl();
dirSecurity.AddAccessRule(new FileSystemAccessRule(UserAccount, UserRights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessType));
directoryInfo.SetAccessControl(dirSecurity);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
我正在使用控制台应用程序 visual studio 2012 为目录创建组权限,但出现错误 "Some or all identity references could not be translated."
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CreateDirectory(@"C:\TestDirectory", @"NAVEEN\IIS_IUSRS");
}
public static void CreateDirectory(string DirectoryName, string UserAccount)
{
if (!System.IO.Directory.Exists(DirectoryName))Directory.CreateDirectory(DirectoryName);
AddUsersAndPermissions(DirectoryName, UserAccount, FileSystemRights.FullControl, AccessControlType.Allow);
}
public static void AddUsersAndPermissions(string DirectoryName, string UserAccount, FileSystemRights UserRights, AccessControlType AccessType)
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(DirectoryName);
DirectorySecurity dirSecurity = directoryInfo.GetAccessControl();
dirSecurity.AddAccessRule(new enter code hereFileSystemAccessRule(UserAccount, UserRights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessType));
directoryInfo.SetAccessControl(dirSecurity);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
我已经找到了我的问题的解决方案。
我的本地没有 Active Directory 组。 DirectorySecurity、AddAccessRule 仅适用于 Active Directory 组,因此 在客户端服务器上,我使用此关键字从 sql 端执行控制台应用程序:“xp_cmdshell”,然后在 Active 中创建了一个目录目录组 并且当时没有收到 ant 类型的错误。
将PC名称从组中移除,只需要"IIS_USRS".
通过这一单一更改,以下代码可以正常运行。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
CreateDirectory(@"C:\TestDirectory", @"IIS_IUSRS");
}
public static void CreateDirectory(string DirectoryName, string UserAccount)
{
if (!System.IO.Directory.Exists(DirectoryName)) Directory.CreateDirectory(DirectoryName);
AddUsersAndPermissions(DirectoryName, UserAccount, FileSystemRights.FullControl, AccessControlType.Allow);
}
public static void AddUsersAndPermissions(string DirectoryName, string UserAccount, FileSystemRights UserRights, AccessControlType AccessType)
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(DirectoryName);
DirectorySecurity dirSecurity = directoryInfo.GetAccessControl();
dirSecurity.AddAccessRule(new FileSystemAccessRule(UserAccount, UserRights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessType));
directoryInfo.SetAccessControl(dirSecurity);
}
catch (Exception ex)
{
throw ex;
}
}
}
}