Почему юнит-тесты дают сбой при запуске из учетной записи `локальной системы`?
Наблюдаемый
У меня есть работа по сборке Jenkins, которая работает на подчиненном Windows. На ведомом устройстве MSBuild настроен правильно и работает под управлением Windows Server 2012R2 Standard x64.
Эта работа по сборке - это сборка и запуск Unittests для моего проекта. В тестах используются компиляторы DUnit и DelphiXE2. Построение тестов не проблема. Но когда запускается тестовый исполняемый файл, Runtime error 216 at 00406E56
происходит. Исполняемый файл не выдает никаких результатов, а файл результатов теста не создается. Исполняемый файл теста использует ConsoleRunner
а не графический интерфейс.
Когда я запускаю exe-файл как локальный администратор или пользователь с ограниченными правами, он работает как положено.
ожидаемый
Исполняемый файл теста обычно выдает результат. Он печатает точку для каждого теста. В любом случае, я ожидаю, что exe запустится.
Собственные исследования
Здесь есть вопрос, который, кажется, описывает то же самое поведение.
Эта проблема возникает в Windows Server 2012 и 2012R2 при запуске исполняемого файла как
local system
(например, через PSExec).Я взглянул на зависимости библиотек с помощью Dependency Walker и обнаружил, что все библиотеки доступны для exe. PATH и другие пути поиска для библиотечных зависимостей имеют как минимум разрешение на чтение для
local system
Я убедился, что WOW64 работает.
Подозреваемые
Я не знаю, требует ли DUnit или Delphi XE2 вообще разрешение на настройку видимого пользовательского интерфейса. Это одна из вещей local system
аккаунт отсутствует.