Подтвердить что ты не робот

У окон есть ограничение, когда процесс, запускаемый запланированной задачей под одним набором ключей, запускает другую программу под другим набором Creds

Итак, у меня есть простой пример, когда у меня есть приложение A, у которого есть некоторые жестко закодированные кредиты для пользователя X, локальный администратор, а затем он запускает приложение B с этими учетными данными с использованием жестко закодированного абсолютного пути. Оба приложения A и B и dotnet консоль, однако они не взаимодействуют с консолью, просто просто записывают информацию в файл.

Когда я запускаю A в интерактивном режиме (под моими кредитами, двойным щелчком, или через CMD.exe или интерактивным сеансом PowerShell, он отлично работает. успешно вызывает B

Когда я запускаю его через запланированные задачи, когда A находится под ключами и вызывает B с пользователем X, код ошибки Process.Start(mystartinfo) -1073741502 или 0xC0000142 в шестнадцатеричном виде, что означает, что "приложение не удалось правильно инициализировать"

Однако, если я запустил запланированную задачу, вызывающую A с учетными данными пользователя X, она работает.

Я сделал этот небольшой тест в основном потому, что вижу подобное поведение при попытке выполнить "start-job -Credential" в PowerShell либо из запланированной задачи, либо для удаленного доступа, либо для запуска процесса запуска в PowerShell или System.Diagnostic > Process.Start изнутри PowerShell в тех же сценариях. Сначала я подумал, что это ошибка в PowerShell, но, похоже, она глубже. Либо Windows, либо, в частности, Dotnet, и я хочу знать, известно ли это/документировано и есть ли какие-либо обходные пути.

4b9b3361

Ответ 1

Я столкнулся с таким поведением, вызванным Windows Server 2008R2. Приложение С# (A) запускает процесс B.

Процесс B не запускается без доступа к Windows Desktop, [не удается вызвать Windows API CreateWindow();], который запрещен для запуска при запуске как службы (или планировщиком) (это предотвращает эскалацию известных привилегий пользователя с помощью "at/interactive cmd.exe" )

Я рекомендую проверить используемую среду и проверить, является ли она той же проблемой. Если да, то вам следует искать, как удалить ссылки на вызов API CreateWindow() или обработать его правильно.

К сожалению, у меня не было доступа к процессу B и поэтому не имел успеха в решении этой проблемы. Я закончил развертывание решения на машине Server 2003.

Ответ 2

Итак, у вас есть процесс A, который запускается из запланированной задачи (Non Interactive), когда вы запускаете процесс B как X (локальный администратор) Разъяснения:

  • Вы администратор этого окна?
  • Требуется ли B ручка окна или консольный дескриптор?

Вы можете попытаться использовать ProcessMonitor, чтобы узнать, какой вызов точно терпит неудачу. Я предполагаю, что B пытается взаимодействовать с рабочим столом и получает отказ в этом.

Когда вы вошли в систему как пользователь A, и вы запускаете интерактивный процесс с помощью планировщика, окно получится отлично. Но если вы вошли в систему как пользователь B (скажем, гостевой пользователь) и запускаете интерактивный процесс, который работает как A (скажем, локальный администратор), тогда система действительно имеет проблемы с тем, что она должна делать при показе пользовательского интерфейса

Подводя итог, если у вас есть интерактивный процесс, который использует учетные данные пользователя, не зарегистрированного в сети, нет явного победителя в отношении того, что нужно делать.

Ответ 3

Хорошо, что этот пост довольно старый, но я запускаюсь в той же самой проблеме (запуск start-процесса powershell завершается с кодом выхода -1073741502 при запуске службы).
По-видимому, это связано с этой проблемой (Почему этот процесс рушится сразу после его запуска?)

Process.Start внутренне вызывает CreateProcessWithLogonW (CPLW), когда учетные данные указаны. CreateProcessWithLogonW нельзя назвать из среды службы Windows (например, службы WCF IIS). Это может быть вызван только из интерактивного процесса (приложение запущенный пользователем, который вошел в систему через CTRL-ALT-DELETE).

Я предполагаю, что это похоже на то, когда вы запускаете запланированную задачу, она запускается в среде Windows. Вероятно, вызываемые вами вызовы API, которые вы вызываете, не запускаются из службы.