Программа Планировщика заданий записывает в папку литералов %LOCALAPPDATA%

у меня есть исполняемый файл .NET (который я создал), который использует Microsoft Интерфейсы Службы Active Directory (через систему.Каталог.Коррупция) делать запросы LDAP. Внутри АДСИ он загружает схему Active Directory и сохраняет ее локально. Предполагается, что эта схема хранится в папке %LOCALAPPDATA%MicrosoftWindowsSchCache.

когда я планирую этот исполняемый файл в Планировщик Задач на сервере Windows 2012 R2 и запустите "Усера" даже если пользователь не вошел в систему программа работает, но он пытается записать файл кэша в папка с буквальным именем %LOCALAPPDATA%MicrosoftWindowsSchCache внутри start-in папка запланированной задачи (которая намеренно установлена в папку моего исполняемого файла). Другими словами, он записывает что-то вроде C:MyApp%LOCALAPPDATA%MicrosoftWindowsSchCache. Я должен был дать UserA явные разрешения на запись в эту папку, чтобы позволить программе работать должным образом.

Я смотрел процесс задачи с Process Monitor, и он немедленно собирается в эту папку. Это не так, если он сначала пытается что-то в C:Users, но не удалось.

когда я войти на сервер как мой собственный пользователь и вручную запустить исполняемый файл как UserA с помощью Запуск от имени другого пользователя исполняемый файл запускается и успешно пишет файл кэша в C:UsersUserAAppDataLocalMicrosoftWindowsSchCache.

почему это происходит с планировщиком задач, и что я могу сделать, чтобы это исправить? Я полагаю, это может быть связано с задачей Планировщик выполнения программы в контексте Усера, но не initialaizing %LOCALAPPDATA% в качестве переменной среды. По прихоти я попытался установить запуск с наивысшими привилегиями на задаче, но это не изменило результат.

17
задан Luke Z
27.03.2023 1:34 Количество просмотров материала 2569
Распечатать страницу

3 ответа

Я считаю, что есть ошибка в Windows 7 / 2012 запланированные задачи, так что они не видят правильные переменные среды для пользователя они работают как:

https://stackoverflow.com/questions/32589381/

чтобы подтвердить, что это происходит, вы можете запустить SET>test.txt в пакетном файле в запланированной задаче, в том же контексте пользователя. Когда я пытаюсь это, он делает не показать правильный, полный набор переменных окружения для указанного user; т. е. не тот же набор, который вы видите, если вы запускаете ту же команду (или пакетный файл), когда фактически вошли в систему как этот пользователь. (Еще более странно, это зависит от того, вошел ли пользователь в систему в данный момент или нет, когда выполняется запланированная задача; если они вошли в систему, то задача does правильные переменные.)

Я думаю, что это поведение не документировано или предназначены и баг ОС Windows Server 2012 с (возможно только Р2?) запланированные задачи обрабатываемый.

NB это относится к PATH переменная тоже, поэтому запланированные задачи могут видеть только исполняемые файлы, которые находятся на по умолчанию путь, или в текущем каталоге, или с полностью заданный путь. Вызов чего-либо, что находится на пути указанного пользователя, но не на пути по умолчанию, даст труднодоступный для отладки (так как он работает в тестировании!) ошибка.

0
отвечен Mike Beaton 2023-03-28 09:22

это является следствием того, как Windows обрабатывает учетные записи пользователей. Когда учетная запись пользователя не вошла в систему, их куст реестра пользователей-Раздел под HKEY_USERS обычно отображается как HKEY_CURRENT_USER - не установлен. Этот улей (который хранится в файле, в профиле каждого пользователя, называется NTUSER.DAT) хранит почти все пользовательские данные, включая пользовательские переменные среды. Windows также имеет системные переменные среды-некоторые переменные, такие как PATH, присутствуют в обоих местоположениях и объединяются - таким образом, они будут отображаться, даже если куст реестра пользователя не установлен. Однако ни один из пользовательских не будет.

Я не знаю, если планировщик задач обрабатывается этот сценарий по-разному в других версиях Windows. Это может будьте достаточно умны, чтобы смонтировать улей пользователя, прежде чем запускать задачу от имени этого пользователя. В Win7 / 2012R2, по-видимому, нет.

чтобы исправить это, необходимо убедиться, что куст реестра пользователя подключен. Самый простой способ сделать это просто сделать убедитесь, что пользователь вошел в систему, так как улей вошедшего в систему пользователя всегда монтируется. Не имея этого, вы можете попробовать подключить улей самостоятельно (API RegLoadKey но я никогда не пытался вызвать его для этого).

0
отвечен CBHacking 2023-03-28 11:39

Это ошибка в Windows Server 2012 R2 и 8.1; Microsoft задокументировал его в KB 2968540.

проблема была исправлена, и исправления KB 3133689 доступно. Это исправление устраняет проблему.

запланированные задачи, выполняемые с помощью UBPM, не имеют достаточных переменных среды, таких как APPDATA, USERPROFILE или TEMP, при запуске соответствующего процесса.

0
отвечен Luke Z 2023-03-28 13:56

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

active-directory
environment-variables
scheduled-tasks
task-scheduler
windows-server-2012-r2
Вверх