有一个应用程序可以在Windows2008上正常启动,我们就叫它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或将其设置为asInvoker。
什么可能是ElevateCreateProcess的原因以及如何避免它?谢谢。
发布于 2012-02-16 00:06:10
事实证明,该问题是由在Vista上崩溃的dll init过程中调用GetUserName引起的。相关帖子是https://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/ae1b1e4ecbb6b123/1e9fefd4c8b12452
发布于 2016-07-01 18:01:59
此行为的原因可能是您的启动器进程的命名。Windows使用ElevateCreateProcess标志扩充与命名模式"*launch*.exe“匹配的每个进程。这种笨拙的行为是在windows\apppatch\sysmain.sdb填充数据库中指定的。您可以通过安装和运行应用程序兼容性工具包来查看此信息。在“系统数据库(32位)/应用程序/自动运行”下,您可以找到此条目。虽然禁用可能也有风险,但在我的情况下,右键单击->禁用条目也不起作用。
https://stackoverflow.com/questions/9131183
复制相似问题