2

Windows 8 中的新 Metro 风格/WinRT 应用程序对您可以调用的 API 有一定的限制。此外,您必须使用异步技术,并且您的应用程序必须是可暂停的,等等。我想知道如何以及是否所有这些都被强制执行。

新的 Metro 应用程序是简单的可执行程序,还是其他的东西(例如,更像 COM 控件,具有一组定义的接口)?API 限制是如何在编译时、运行时(通过沙盒等)或仅通过 Windows 应用商店策略(类似于 iOS 中的情况)实施的?如果我觉得自己很狡猾,我是否可以例如获得屏幕句柄并操作界面、在顶部添加浮动窗口、在后台启动某些东西,或者以其他方式突破 Metro 的限制?

我问的一个原因是我正在研究为 Python 创建一个 WinRT 库,以便可以使用它来编写 Metro 应用程序。但是,Python 核心显然使用了大量非 WinRT API 调用,因此这可能从一开始就注定了。我还想大致了解 Metro 应用程序的结构。


编辑:根据这个线程,您可以使用 C 运行时的所有功能。似乎您可以编译调用禁止函数的东西,但是“应用程序验证程序”会抱怨。我想知道你是否可以运行这样一个混合应用程序,如果你不关心商店(也许稍后通过为被禁止的功能编写变通方法使其与商店兼容)......

4

3 回答 3

5

Metro 风格的Windows 应用商店应用程序可以做什么(至少)有两组不同的技术限制。

首先是一组安全限制:Windows 应用商店应用程序以低权限运行,因此在允许它们与系统其余部分交互方面受到限制。例如,Windows 应用商店应用程序无法访问文件系统中的任意位置,它只能访问预定义位置集中的文件,以及系统明确允许访问的文件。您不能违反这些安全限制(如果可以,那将是一个相当有问题的操作系统错误)。

第二组限制是API 分区。Windows 应用商店应用只允许调用应用分区中存在的系统函数。MSDN 上每个系统函数的文档指定该函数是否存在于 App Partition 中。您还可以通过查看定义函数的头文件找到:函数是根据项目所针对的 API 分区有条件地定义的:WINAPI_FAMILY宏对此进行控制(有关更多信息,请参见 Windows SDK 中的 winapifamily.h)。

如果您调用“未经批准”的函数,则结果未定义。它可能看起来有效;它可能会灾难性地失败。它今天可能看起来工作正常,明天可能会发生灾难性的故障(或在应用 Windows 更新后,或使用下一版本的 Windows)。

API 分区以各种方式实施。标头的构造使得很难调用未经批准的函数。如果您自己定义函数或更改WINAPI_FAMILY,您的应用将无法通过 Windows 应用认证工具包 (WACK) 过程。我的理解是 CLR 禁止在运行时调用未经批准的 .NET 功能,尽管我不太熟悉 .NET 限制。无论如何,我的理解是,如果您的应用调用未经批准的功能,您不能将其提交到商店,根据“Windows 8 应用认证要求”(请自行阅读这些要求;我没有详细阅读它们并且我当然不能为你解释它们)。

如果您不关心将应用程序提交到 Windows 应用商店,或者只是想编写一些测试应用程序或玩 WinRT,那么没有什么可以阻止您尝试调用未经批准的函数。例如,我发现为调试目的创建控制台窗口很有用。这似乎工作正常,我不太在意它未能通过 Windows 应用商店认证,因为它仅用于调试和测试。

于 2012-08-21T15:53:18.610 回答
0

它们不是标准的可执行文件。您只能使用 .Net 4.5 的一个子集来创建不允许您(或者更确切地说,使其极难)执行 MS 不希望 Metro 应用程序执行的任何操作的应用程序。它们也被大量沙盒化。

于 2012-08-20T15:19:25.703 回答
0

您只有有限的 .net api 部分可用

.NET Framework 提供了托管类型的子集,可用于使用 C# 或 Visual Basic 创建适用于 Windows 的 Metro 风格应用程序。此托管类型的子集称为 .NET for Windows Store 应用程序,它使 .NET Framework 开发人员能够在熟悉的编程框架内创建 Metro 风格的应用程序。与开发 Metro 风格应用程序无关的任何类型都不包含在子集中。

您可以将这些托管类型与来自 Windows 运行时 API 的类型一起使用来创建 Metro 风格应用。通常,您不会注意到使用托管类型和 Windows 运行时类型之间的任何区别,只是托管类型驻留在以 System 开头的命名空间中,而 Windows 运行时类型驻留在以 Windows 开头的命名空间中。.NET for Windows Store 应用程序和 Windows 运行时一起提供了完整的类型和成员集,可用于使用 C# 或 Visual Basic 开发 Metro 风格的应用程序。

有应用商店要求

3.1 您必须仅使用 Metro 风格 API 来实现 Metro 风格应用程序的功能 我们在 Metro 风格应用程序 API 参考中描述了这些 API。您的应用程序可能仅依赖于 Windows 应用商店中列出的软件。

应用程序是沙盒的

简而言之,您必须使用提供的 api。

于 2012-08-20T15:25:14.250 回答