我一直在使用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
。
当我什至无法获得需要编辑其权限的目录的访问控制时,如何执行这些更改?
答案 0 :(得分:0)
调用上述函数时,它只会设置前4张图像,因此在调用该函数之前,我需要删除我认为的第5张图像。
您的描述正确。请检查以下屏幕截图,默认的锁屏图像存储在LockScreen_o
文件夹中。每次调用上述方法(LockScreen.SetImageFileAsync
)时,它将创建一个新文件夹并以a-z顺序命名该文件夹的名称。这意味着每个锁屏图像都有自己的文件夹,因此您无需删除锁屏后创建的第五张图像。文件夹的默认所有者是
系统,无法使用uwp代码进行修改。
我使用以下代码设置锁定屏幕,使其适用于每张图像。
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
{
}
}