【发布时间】: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 上运行良好。但是在这期间发生了很多变化,因此要确定重要的区别是什么并不是一件简单的事情。