我正在开发一个应用程序,它将一些文件存储在 CommonApplicationData
文件夹中。我的应用程序需要修改这些文件。我成功创建了一个自定义操作来授予 CommonApplicationData
文件夹中我的应用程序文件夹的 fullcontrol
权限。但是,这并没有解决非管理员用户的问题。当我以用户身份登录并尝试修改其中一个文件时,会收到“拒绝访问”的消息。
我该如何解决这个问题?谢谢。
以下是我在自定义操作中使用的代码:
public void GetUsers()
{
SelectQuery sQuery = new SelectQuery("Win32_UserAccount", "Domain='" + System.Environment.UserDomainName.ToString() + "'");
try
{
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQuery);
foreach (ManagementObject mObject in mSearcher.Get())
{
Permission(mObject["Name"].ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void Permission(string user)
{
string directory = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string CompanyFolderPath = Path.Combine(directory, "naseelco\\lms2004");
DirectoryInfo myDirectoryInfo = new DirectoryInfo(CompanyFolderPath);
DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
string User = System.Environment.UserDomainName + "\\" + user;
myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, AccessControlType.Allow));
myDirectoryInfo.SetAccessControl(myDirectorySecurity);
}
编辑:
对于那些想要解决这个问题的人:
不是给父文件夹授予权限,而是为该文件夹中的每个用户单独授予各自的访问权限。上面代码中的Permission方法已经被修改如下:
private void Permission(string user)
{
string directory = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string filePath = Path.Combine(directory, "naseelco\\lms2004\\fms.txt");
FileSecurity fSecurity = File.GetAccessControl(filePath);
FileSystemAccessRule rule = new FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
}
非管理员
用户拥有权限的,但这些位置不重叠,因此您无法存储全局数据。我希望您在找到解决方案时发布它。您可能需要使用注册表或程序文件位置。 - user153923FOLDERID_Public
。 - David Heffernan