Mar*_* Ba 5 c# windows visual-studio visual-c++
我目前正在与某些应用程序兼容性设置(特别是某些填充程序)进行斗争,并正在compatibilty研究应用程序清单的这一部分。
除了细节之外,令我感到奇怪的是,即使使用Visual Studio 2015,应用程序兼容性清单(*)似乎也没有任何默认设置-而是默认为无,从而默认为“ Windows Vista”。应用清单中列出的东西。
这对我来说似乎很奇怪,但是也许我错过了一些东西:
由任何不了解这些知识的团队(并且我敢说有很多这样的团队)新创建的Visual-C ++ / Native或C#中的每个新应用程序都将在Windows Vista兼容模式下运行。确实是这样吗?有这个理由吗?
(*):
...
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{...}"/>
Run Code Online (Sandbox Code Playgroud)
而在我看来:概述不错
是的,Visual Studio 2015 中新创建的项目(我只验证了 .NET 项目,没有本机 C++)将没有任何compatibility部分,并且将在 Windows Vista 上下文下运行,正如您所说的正确。很容易检查。如果您创建新的控制台(例如)项目并转到项目属性 -> 应用程序,您将看到在清单部分中默认声明以下内容:“使用默认设置嵌入清单”。默认设置的清单是什么?构建控制台项目并使用任何资源查看器查看,您会发现:
<?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" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)
如您所见,没有兼容性部分。然后运行该控制台项目(使其Console.ReadKey()不立即退出)。打开资源监视器 ( resmon),转到 CPU 部分并添加“操作系统上下文”列。您将在该列中看到新控制台应用程序的“Windows Vista”,因此它肯定在 Windows Vista 上下文中运行。
至于理由 - 我只能对此做出假设,这是一个。兼容性部分的目标表述为:
此部分帮助 Windows 确定应用程序设计的目标Windows 版本
当您在 Visual Studio 中创建新项目时,不知道它是否是在特定版本的 Windows 上设计(这意味着在其上进行测试)并了解更高版本的 Windows 中引入的行为更改的,因此采取了安全的方法来默认行为这在所有版本的 Windows(从 Vista 开始)上都是相同的- 与默认行为相反,不同版本的 Windows 上的行为有所不同。对于不同的行为,您(理想情况下)应该在您支持的所有 Windows 版本上测试您的应用程序。当行为相同时 - 您可以在任何一个版本上进行测试。
因此,为不知道这些行为更改的开发人员提供相同的行为是合理的 - 他们在自己选择的 Windows 版本上测试的应用程序将很乐意在其他版本上运行(关于与提到的兼容性部分相关的功能)。
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |