установка прав доступа работает в режиме отладки, но не в режиме выпуска - PullRequest
0 голосов
/ 13 октября 2018

Я занимаюсь разработкой программного обеспечения UWP, в котором мне нужно записать файл "input.txt", расположенный в каталоге Temp.Тем не менее, при предоставлении разрешения на этот каталог в режиме выпуска у меня возникла проблема, и он видел, как разрешение не установлено:

        string str = inputmessage.Text;

        string path = @"input.txt";

        try
        {
            SetAccess(WindowsIdentity.GetCurrent().Name, 
            Path.GetTempPath());// Path.GetFullPath("."));

            // FileStream.SetAccessControl();
            File.WriteAllText(Path.GetTempPath()+path,str);
        }

, а установленный доступ определяется как:

       private static bool SetAccess(string user, string folder)
    {
        const FileSystemRights Rights = FileSystemRights.FullControl;

        // *** Add Access Rule to the actual directory itself
        var AccessRule = new FileSystemAccessRule(user, Rights,
            InheritanceFlags.None,
            PropagationFlags.NoPropagateInherit,
            AccessControlType.Allow);

        var Info = new DirectoryInfo(folder);
        var Security = Info.GetAccessControl(AccessControlSections.Access);
        bool Result;

        Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);

        if (!Result) return false;

        // *** Always allow objects to inherit on a directory
        const InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

        // *** Add Access rule for the inheritance
        AccessRule = new FileSystemAccessRule(user, Rights,
            iFlags,
            PropagationFlags.InheritOnly,
            AccessControlType.Allow);

        Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);

        if (!Result) return false;

        Info.SetAccessControl(Security);

        return true;
    }

1 Ответ

0 голосов
/ 15 октября 2018

FileSystemAccessRule принадлежит System.Security.AccessControl Пространству имен и не совместимо с UWP.Вы не можете использовать его для доступа к TemporaryFolder .

Если вы хотите записать в файл "input.txt", расположенный в каталоге Temp.Пожалуйста, обратитесь к следующему процессу.

private async void writeTextToTem(string info)
{
    var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("info.text", CreationCollisionOption.OpenIfExists);

    if (file != null)
    {
        await Windows.Storage.FileIO.WriteTextAsync(file, info);
    }
}

И Path.GetTempPath() также работают в UWP, и соответствующая папка C:\Users\Administrator\AppData\Local\Packages\497f6a93-9de3-4985-b27e-c2215ebabe72_75crXXXXXXX\AC\Temp\, она содержится в песочнице приложения, к которой вы можете получить доступнапрямую.

var path = Path.GetTempPath();
var folder = await StorageFolder.GetFolderFromPathAsync(path);
var file = await folder.CreateFileAsync("info.text", CreationCollisionOption.OpenIfExists);
if (file != null)
{
    await Windows.Storage.FileIO.WriteTextAsync(file, str);
}

Для более подробной информации вы можете обратиться Права доступа к файлу .

...