У меня есть исполняемый файл .NET (который я создал), который использует сервисные интерфейсы Microsoft Active Directory (через систему.DirectoryServices.AccountManagement) для выполнения запросов LDAP. Внутри ADSI он загружает схему Active Directory и сохраняет ее локально. Предполагается, что эта схема будет храниться в папке по адресу %LOCALAPPDATA%\Microsoft\Windows\SchCache\
.
Когда я планирую этот исполняемый файл в планировщике заданий на Windows Server 2012 R2 и задаю его запуск под именем "UserA", даже если этот пользователь не вошел в систему, программа запускается, но пытается записать указанный выше файл кэша в папку с буквальным именем %LOCALAPPDATA%\Microsoft\Windows\SchCache\
в начальной папке запланированной задачи (которая намеренно установлена в папку моего исполняемого файла). Другими словами, он записывает что-то вроде C:\MyApp\%LOCALAPPDATA%\Microsoft\Windows\SchCache\
. Я должен был дать UserA явные разрешения на запись в эту папку, чтобы программа могла работать правильно.
Я наблюдал за процессом с помощью Process Monitor, и он сразу же попадает в эту папку. Это не так, как если бы он сначала что-то пробовал в C:\Users\
но потерпел неудачу.
Когда я захожу на сервер как мой собственный пользователь и вручную запускаю исполняемый файл от имени пользователя A, используя команду Запуск от имени другого пользователя, исполняемый файл запускается и успешно записывает файл кэша в C:\Users\UserA\AppData\Local\Microsoft\Windows\SchCache\
.
Почему это происходит с планировщиком заданий и что я могу сделать, чтобы это исправить? Я предполагаю, что это может иметь отношение к планировщику задач, выполняющему программу в контексте UserA, но не инициализирующему %LOCALAPPDATA%
в качестве переменной среды. По какой-то причине я попытался установить « Выполнить» с наивысшими привилегиями для задачи, но это не изменило результат.