Если вы столкнулись с этим, я предполагаю, что вы выполняете этот процесс на 64-битной версии Windows.
фон:
В Windows 32 бит, есть одна папка System32 называется "System32", который хранит все 32-разрядные библиотеки DLL. В Windows 64 бит есть две папки System32, которые все еще называются System32, а другая - SysWOW64.
Эти две папки хранят противоположное тому, что означают их имена:
- System32 хранит 64-битные библиотеки DLL.
- SysWOW64 хранит 32-разрядные библиотеки DLL.
SysWOW64 означает «Windows 32-bit на Windows 64-bit». Таким образом, это папка, которая существует для обратной совместимости с 32-разрядным для 32-битных процессов.
Почему это ломается?
Microsoft одержим обратной совместимостью, поэтому, когда они добавили 32-битную эмуляцию на 64-битной Windows, они хотели сделать битовую систему невидимой для 32-битных процессов, и они представили пучок совместимых прокладок (исправления).
Один из этих прокладок перенаправляет запросы ввода-вывода для% WINDIR% \ System32 в% WINDIR% \ SysWOW64 для процессов, работающих только в 32-разрядном режиме.
Итак, когда вы запрашиваете переход от:
C:\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg
Windows, может на самом деле вместо того, чтобы просить перейти от:
C:\Windows\SysWOW64\oobe\info\backgrounds\backgroundDefault.jpg
Который не существует. Таким образом, объясняя ошибку, которую вы видите.
Исправление
Самое простое решение, чтобы изменить вашу программу для создания как битовая процесса 64. Вы можете сделать это:
Щелкните правой кнопкой мыши по проекту -> Свойства -> Build [Tab] -> Целевые платформы -> x64
Теперь при запуске, запросы в отношении% WINDIR% \ System32 фактически должны ударить % WINDIR% \ System32 для реального.
В качестве альтернативы, если вы потребность запустить процесс в 32-битном режиме (например, из-за библиотеки совместимости), вы можете попросить Windows, чтобы отключить прокладку так:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
private static void Main(string[] args)
{
IntPtr ptr = new IntPtr();
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
}
В обоих запросах случае следует обращаться более буквально операционной системой, и вы можете обновить фон экрана блокировки (или любую другую операцию в System32).