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



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

当同一应用程序由另一个应用程序(启动器)启动时,App1在secur32.dll中崩溃。研究表明,这两个病例的环境不同。

当应用程序崩溃时,它的环境有一个额外的变量__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或将其设置为Invoker。

ElevateCreateProcess的可能原因是什么?如何避免?非常感谢。

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

事实证明,这个问题是由在dll初始化期间调用GetUserName引起的,该初始化在Vista上崩溃。相关帖子为https://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/ae1b1e4ecbb6b123/1e9fefd4c8b12452

相关内容

  • 没有找到相关文章

最新更新