Установите разрешения на запись для всех пользователей для моей папки программы - PullRequest
6 голосов
/ 13 октября 2010

Я собрал программу в Visual Studio.Программа создает файл журнала и записывает в него во время работы программы.Поэтому я создал установщик (setup-project), который должен устанавливать права на запись для моей программной папки независимо от того, какой пользователь работает с программой.в настоящее время это выглядит так:

// ...
}
  InitializeComponent();

  string folder = Directory.GetCurrentDirectory();

  DirectorySecurity ds = Directory.GetAccessControl(folder);
  ds.AddAccessRule(new FileSystemAccessRule("Everyone",   //Everyone is important
                                                  //because rights for all users!
   FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow));
}
// ...

В последних двух строках я получаю System.SystemException: «Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Doméne konnte nicht hergestellt werden.[Перевод: «Невозможно установить доверительные отношения между основным доменом и доверенным доменом».]

Трассировка стека выглядит следующим образом:

bei System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
bei System.Security.Principal.NTAccount.Translate(Type targetType)
bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
bei System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule)

У вас есть представление о том, что я могуделать?спасибо

Ответы [ 3 ]

3 голосов
/ 12 июля 2011

Разве вы не пропустили утверждение, в котором фактически вернули управление доступом обратно в каталог?

3 голосов
/ 13 октября 2010

Возможно, лучший ответ не тот, который вы просили. Есть веская причина не писать в каталог программных файлов. Данные журнала, в частности, являются временными и не должны записываться здесь.

Гораздо лучшая идея записывать данные журнала в каталог, указанный в переменной среды TEMP. Если вы сделаете это, вы избавите своих пользователей от нескольких неприятностей и предотвратите проклятие вашего программного обеспечения в будущем. Пожалуйста, ознакомьтесь с ответом на ту же тему:

Разрешить права доступа для записи в программных файлах Windows 7

0 голосов
/ 14 октября 2010

Этот ранее заданный вопрос должен указать вам правильное направление. По сути, вы НЕ хотите, чтобы любой пользователь записывал в папку Program Files. UAC, безопасность и другие меры существуют для того, чтобы попытаться предотвратить это в максимально возможной степени.

По сути, если вам нужен один файл, который будет записан всеми пользователями, вы захотите его в папке ProgramData, доступной через %ALLUSERSPROFILE%, а не во временную папку отдельных пользователей, которая определенно что вы хотите сделать с файлом журнала. Помните, что содержимое временной папки следует считать нестабильным и может быть удалено в любое время, например с помощью мастера очистки диска.

...