GetAccessControl抛出UnauthorizedAccessException访问SystemData目录

时间:2018-12-23 19:29:50

标签: c# wpf uwp readonly unauthorizedaccessexcepti

我一直在使用C#,特别是UWP / WPF框架,编辑C:\\ProgramData\\Microsoft\\Windows\\SystemData的某些子目录,以编辑和删除C:\\ProgramData\\Microsoft\\Windows\\SystemData\\ID\\ReadOnly中存储的锁屏图像。

我最初只是手动更改了ProgramData目录的权限,然后才是SystemData目录的权限,但是,每当系统修改SystemData目录中的文件时,它的权限都会被重置。 (我希望将程序的最终产品安排为定期运行,因此无法每次都手动执行此操作。)只需调用:Directory.GetAccessControl("C:\\ProgramData\\Microsoft\\Windows\\SystemData"); 产生System.UnauthorizedAccessException: 'Attempted to perform an unauthorized operation.'

该目录的默认权限不允许我读取目录的属性或访问其文件,而无需以管理员身份修改其权限。因为我可以手动进行操作(编辑权限以完全控制自己),所以我认为在C#中可以采用某些方法。我的app.manifest确实有requireAdministrator作为requestedExecutionLevel,并且我目前没有使用任何模拟,当前的WindowsIdentity显示为LAPTOP-ID\\USERNAME

当我什至无法获得需要编辑其权限的目录的访问控制时,如何执行这些更改?

1 个答案:

答案 0 :(得分:0)

  

调用上述函数时,它只会设置前4张图像,因此在调用该函数之前,我需要删除我认为的第5张图像。

您的描述正确。请检查以下屏幕截图,默认的锁屏图像存储在LockScreen_o文件夹中。每次调用上述方法(LockScreen.SetImageFileAsync)时,它将创建一个新文件夹并以a-z顺序命名该文件夹的名称。这意味着每个锁屏图像都有自己的文件夹,因此您无需删除锁屏后创建的第五张图像。文件夹的默认所有者是 系统,无法使用uwp代码进行修改。

enter image description here

我使用以下代码设置锁定屏幕,使其适用于每张图像。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
    picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
    picker.FileTypeFilter.Add(".jpg");
    picker.FileTypeFilter.Add(".jpeg");
    picker.FileTypeFilter.Add(".png");

    Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
    if (file != null)
    {
        await LockScreen.SetImageFileAsync(file);
    }
    else
    {

    }

}