Я работаю над приложением, которое хранит некоторые файлы в папке CommonApplicationData
. Мое приложение должно изменить эти файлы. Мне удалось создать настраиваемое действие, чтобы предоставить права fullcontrol
для папки моего приложения в папке CommonApplicationData
. Но это не решило проблему для пользователей без прав администратора. Когда я вхожу в систему как пользователь и пытаюсь изменить один из этих файлов, я получаю сообщение «Отказано в доступе».
Как я могу решить эту проблему? Спасибо.
Вот код, который я использовал в пользовательском действии:
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);
}
EDIT:
Для тех, кто хотел бы узнать решение этой проблемы:
Вместо предоставления прав доступа родительской папке отдельным файлам в этой папке предоставляются права доступа для каждого пользователя. Метод 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);
}