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