2012-02-03 7 views
2

Существует приложение, которое можно запустить должным образом с помощью Windows 2008, позволяет называть его App1.Windows 2008: сбой приложения, когда __COMPAT_LAYER = ElevateCreateProcess

Когда одно и то же приложение запускается другим приложением (Launcher), приложение 1 вылетает в secur32.dll. Исследование показало, что среда в этих двух случаях отличается.

При сбое приложения в среде есть одна дополнительная переменная __COMPAT_LAYER = ElevateCreateProcess.

Настройка __COMPAT_LAYER = asInvoker на глобальном уровне системы не решила проблему. Добавление App1 и Launcher в реестр на HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers также не разрешает его.

Обе программы имеют следующее разрешение на их манифестов: уровень requestedExecutionLevel = "asInvoker" UIAccess = "ложь"

UAC выключен. Обновления Windows обновлены. Единственное решение, которое помогает, - это впрыскивание другой программы между ними, которая очищает __COMPAT_LAYER или устанавливает ее в asInvoker.

Что может быть причиной ElevateCreateProcess и как его избежать? Спасибо.

ответ

1

Причиной такого поведения может быть именование вашего процесса запуска. Windows дополняет каждый процесс, соответствующий шаблону именования «* launch * .exe» с флагом ElevateCreateProcess. Это неудобное поведение указывается в базе данных windows \ apppatch \ sysmain.sdb. Вы можете просмотреть это, установив и запустив Инструментарий совместимости приложений. В разделе «Системная база данных (32-разрядная версия)/Applications/Autorun» вы можете найти эту запись. Хотя отключение может быть и рискованным, rightclick -> Disable Entry также не работает в моем случае.