Хотя этот параметр недоступен в поле со списком DefaultLocation, вы можете вручную указать параметр [CommonAppDataFolder] .После того, как вы дадите эту опцию, пользовательская папка будет скопирована в папку ProgramData.
Но папка или файлы, созданные таким образом, имеют разрешение только на чтение.Чтобы сделать права на запись в папку / файлы, я использовал альтернативный подход.Я использовал установочный файл вместо вышеупомянутого.Ниже приведен пример кода для обеспечения полного доступа к папкам и файлам.
[RunInstaller(true)]
public partial class Installer1 : Installer
{
private string fullPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\YourFolder";
public override void Install(IDictionary savedState)
{
base.Install(savedState);
//Add custom code here
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
// Create files on inside the folder to make them writable
...
}
// /4457121/kak-dat-polnoe-razreshenie-na-fail-sozdannyi-moim-prilozheniem-dlya-vseh-polzovatelei
DirectoryInfo dInfo = new DirectoryInfo(fullPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null),
FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
}
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
//Add custom code here
if (Directory.Exists(fullPath))
{
Directory.Delete(fullPath, true);
}
}
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
//Add custom code here
}
public override void Uninstall(IDictionary savedState)
{
Process application = null;
foreach (var process in Process.GetProcesses())
{
if (!process.ProcessName.ToLower().Contains("yourprocessname"))
continue;
application = process;
break;
}
if (application != null && application.Responding)
{
application.Kill();
base.Uninstall(savedState);
}
if (Directory.Exists(fullPath))
{
Directory.Delete(fullPath, true);
}
}
}