Полагаю, мой другой пост был удален из-за его слишком общего характера, поэтому я уточнил его ниже:
Нужно сделать специальное действие.Это довольно просто, посмотрите пошаговое руководство по MSDN для написания пользовательского действия на C # здесь .Вы поместите свой изменяющий права код в метод Install:
Следуйте первым шагам по ссылке, чтобы получить новый проект установщика, на который ссылается ваше решение для установки.Вы должны сделать это таким образом, чтобы вы могли создать dll, которая вызывается в конце установки.
На самом деле установка привилегий чтения / записи для пользователей была немного хитрее, и ближе всего я мог получитьнабор для аутентифицированных пользователей.Я собрал воедино несколько других решений, которые я нашел в Интернете, чтобы придумать следующее:
public override void Install(IDictionary stateSaver)
{
// This gets the named parameters passed in from your custom action
string folder = Context.Parameters["folder"];
// This gets the "Authenticated Users" group, no matter what it's called
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
// Create the rules
FileSystemAccessRule writerule = new FileSystemAccessRule(sid, FileSystemRights.Write, AccessControlType.Allow);
if (!string.IsNullOrEmpty(folder) && Directory.Exists(folder))
{
// Get your file's ACL
DirectorySecurity fsecurity = Directory.GetAccessControl(folder);
// Add the new rule to the ACL
fsecurity.AddAccessRule(writerule);
// Set the ACL back to the file
Directory.SetAccessControl(folder, fsecurity);
}
// Explicitly call the overriden method to properly return control to the installer
base.Install(stateSaver);
}
Затем, когда вы создаете свое собственное действие, редактируете его свойства и добавляете что-то подобное в свойстве CustomActionData:
/folder="[CommonAppDataFolder][ProductName]"