Windows 2008:当__COMPAT_LAYER = ElevateCreateProcess时,应用程序崩溃

时间:2012-02-03 15:34:05

标签: winapi windows-server-2008 process-elevation

有一个应用程序可以通过Windows 2008正常启动,我们称之为App1。

当另一个应用程序(Launcher)启动相同的应用程序时,App1在secur32.dll中崩溃。 研究表明,这2例患者的环境不同。

当应用程序崩溃时,它的环境有一个额外的变量__COMPAT_LAYER = ElevateCreateProcess。

在全局系统级别设置__COMPAT_LAYER = asInvoker无法解决问题。 将App1和Launcher添加到HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers中的注册表也无法解析它。

两个程序在清单中都有以下权限:requestedExecutionLevel level =“asInvoker”uiAccess =“false”

UAC已关闭。 Windows更新是最新的。 唯一有帮助的解决方案是在中间注入另一个清除__COMPAT_LAYER或将其设置为asInvoker的程序。

ElevateCreateProcess可能是什么原因以及如何避免它?谢谢。

2 个答案:

答案 0 :(得分:1)

此行为的原因可能是Launcher进程的命名。 Windows增加了与命名模式匹配的每个进程" * launch * .exe"使用ElevateCreateProcess标志。这种尴尬的行为在windows \ apppatch \ sysmain.sdb shim数据库中指定。您可以通过安装和运行应用程序兼容性工具包来查看此信息。在"系统数据库(32位)/应用程序/自动运行"你可以找到这个条目。虽然禁用也可能有风险,但右键单击 - >禁用条目在我的情况下也不起作用。

答案 1 :(得分:0)

事实证明,在dll init期间调用GetUserName会导致问题在Vista上崩溃。相关帖子为https://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/ae1b1e4ecbb6b123/1e9fefd4c8b12452