【问题标题】:How does Win8 classify a process as a "Background Process"? My app works in Win7 but shows no UI in Win8Win8如何将一个进程归类为“后台进程”?我的应用程序在 Win7 中运行,但在 Win8 中没有显示 UI
【发布时间】:2013-02-15 20:06:41
【问题描述】:

我相当普通的基于 MFC 的 Windows 应用程序在 Windows 7 上运行良好。但是当我在 Windows 8 中运行它时,没有出现 UI。起初我以为它无法正常启动,但最终意识到,如果我打开任务管理器,它会显示我的应用程序正在运行,但它列在“后台进程”部分下。

Windows 8 在确定它是“后台进程”的进程上运行的启发式方法是什么?或者我可以做些什么——也许在应用程序清单中——明确地将我的应用程序标记为 前台 进程?

我试过在 Win7 和 XP 兼容模式下运行,但无济于事。我试过几台Win8机器,结果都一样。

不管怎样,这个应用程序是用 Visual Studio 2003 编译的,我没有选择使用更新的编译器。

我用谷歌搜索了诸如“win8 后台进程”之类的东西,但我得到的只是那些想要创建后台进程的人。一些答案表明必须使用应用程序清单注册后台进程,但我仔细检查了我的清单,它绝对没有关于作为后台进程的任何内容。

这是我的清单,以防你能从中看出什么:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="X86" 
    name="MyProductName"
    type="win32" 
/> 
    <description>My Product Description</description> 
    <dependency> 
        <dependentAssembly> 
            <assemblyIdentity 
                type="win32" 
                name="Microsoft.Windows.Common-Controls" 
                version="6.0.0.0" 
                processorArchitecture="X86" 
                publicKeyToken="6595b64144ccf1df" 
                language="*" 
            /> 
        </dependentAssembly> 
    </dependency> 
    <asmv3:trustInfo xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
        <asmv3:security>
            <asmv3:requestedPrivileges>
                <asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
            </asmv3:requestedPrivileges>
        </asmv3:security>
    </asmv3:trustInfo>
</assembly>

如果我在此处找不到答案,我将向 Microsoft 发起支持事件以获得他们的帮助。如果到了那个地步,我肯定会用我的发现更新这个问题。

【问题讨论】:

  • 您是否尝试过根据您的程序制作一个 hello world 程序并查看它是否也无法显示?
  • 如果将uiAccess="false" 更改为uiAccess="true" 会发生什么?
  • 它只是一个没有可见窗口的进程。关闭按类型查看 + 分组以避免混淆。显然你需要调试它。
  • 小心uiAccess=true,除非你真的需要它,否则不要使用它。启用它会产生一些后果,例如要求对应用程序进行代码签名,以及禁用 UIPI。普通应用应该可以与 uiAccess=false 一起正常工作。
  • @Yakk 我确实有相同程序的更高版本,使用 VS2010 构建,在 Win8 上运行良好。但是在这期间发生了很多变化,因此要确定重要的区别是什么并不是一件简单的事情。

标签: c++ windows-8


【解决方案1】:

我正在开发 Windows 8 应用程序,但对 MFC 开发知之甚少。所以据我所知,MFC 开发更类似于 Silverlight 开发,但 Windows 8 开发与 MFC 开发平台更不同。

顺便说一下《Win 8中后台进程的分类》:

应用程序进程处于挂起模式,这意味着应用程序正在运行但由于桌面模式而没有显示任何用户界面。 为了澄清这一点,我再次检查了通过 XAML 和 C# 在 win 8 中创建一个线程,并使该线程处于挂起模式,仅在那个时候该进程在任务管理器中显示为后台进程。

此外,“仅适用于 Windows 8”

当提供给应用的资源将减少或将分配这些资源但应用仍在加载并运行时,任何应用的进程都会显示为后台进程...

Windows 8 的此功能称为“自动资源分配”...

很抱歉,如果您在这里找不到答案,但我认为这可以帮助您了解“Win 8 中哪个进程被归类为后台进程”

【讨论】:

    【解决方案2】:

    这纯粹是我的猜测,因为我找不到任何关于此的文档,但我怀疑 MFC 中的某些东西失败了,并且缺少工作 UI 是任务管理器将您的应用程序分类为背景的原因进程,因为用户无法与之交互。

    【讨论】:

    • 看来你是对的,问题是没有出现 UI(尽管在这种情况下不是 MFC 的错)。事实上,WinMain 中的断点永远不会被击中,所以不知何故,应用程序很早就死锁了,也许是在加载 dll 时......?我的应用程序尚未运行,但您已经回答了我的问题,并通过表明这不是 Windows 8 错误分类我的进程的情况给了我一个指导。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多