【发布时间】:2015-01-14 16:22:37
【问题描述】:
当我以普通(非管理员)帐户运行时,在 Windows 8.1 上运行的 C# 应用程序中调用 Environment.OSVersion.Version 返回 6.2(即 Windows 8),但以管理员身份运行时返回 6.3(Windows 8.1)。
根据本文http://msdn.microsoft.com/en-us/library/windows/desktop/dn481241%28v=vs.85%29.aspx,我的清单确实包含对 Windows 8.1 的兼容性,但我只有在以提升的权限运行时才能获得正确的版本号。知道为什么吗?
我的清单:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!--Windows 10 - add once tested-->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>-->
</application>
</compatibility>
</asmv1:assembly>
版本号:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
类似问题:
Why OS.Version reports Windows 8.0 for Windows 8.1?
How can I detect Windows 8.1 in a Desktop application
好的——也许我可以缩小这个问题的范围。如果我从带有调试器的 Visual Studio 运行我的应用程序,我会看到这个问题(即它报告 6.2 = Windows 8)。但是,如果我在没有调试的情况下启动应用程序(没有 vshost),那么我看不到问题(即它报告 6.3 = Windows 8.1)。
问题是manifest内置在我的应用程序的exe中,但执行过程是vshost包装器,它没有报告与Windows 8.1兼容的manifest吗?这对我来说很有意义,但这是奇怪的行为。这实际上意味着在调试您的 app.manifest 文件时是无用的。
【问题讨论】:
-
你能出示你的清单吗?
-
尝试在构建选项中关闭托管选项
-
是的,这确实有效,我仍然可以调试应用程序。那么托管过程的意义何在?
-
托管进程的msdn页面:msdn.microsoft.com/en-us/library/ms185331.aspx