如何实施WinRT / Metro应用程序限制?

时间:2012-08-20 15:17:11

标签: windows-8 microsoft-metro windows-runtime executable

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

新的Metro应用程序是简单的可执行程序,还是其他东西(例如更像COM控件,带有一组已定义的接口)?如何在编译时,运行时(通过沙盒等)或仅通过Windows应用商店策略(类似于iOS中的情况)强制执行A​​PI限制?如果我感到狡猾,我可以,例如获取屏幕的句柄并操作界面,在顶部添加浮动窗口,在后台启动某些内容,或以其他方式突破Metro的范围?

我问的一个原因是我正在考虑为Python创建一个WinRT库,以便可以使用它来编写Metro应用程序。但是,Python核心显然使用了很多非WinRT API调用,所以这可能从一开始就注定要失败。我也想了解Metro应用程序的解剖结构。


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

3 个答案:

答案 0 :(得分:5)

Metro风格 Windows应用商店应用可以执行(至少)两组不同的技术限制。

第一个是一组安全限制:Windows应用商店应用以低权限运行,因此限制了它们与系统其余部分进行交互的方式。例如,Windows应用商店应用无法访问文件系统中的任意位置,它只能访问预定义位置集中的文件以及系统明确授予访问权限的文件。您不能违反这些安全限制(如果可以的话,那将是一个相当棘手的操作系统错误)。

第二组限制是 API分区。 Windows应用商店应用仅允许调用应用程序分区中存在的系统功能。 MSDN上每个系统函数的文档指定该功能是否存在于应用程序分区中。您还可以通过查找定义函数的头文件来查找:根据项目所针对的API分区有条件地定义函数:WINAPI_FAMILY宏控制它(请参阅Windows SDK中的winapifamily.h以获取更多信息)信息)。

如果您调用“未批准”功能,则结果未定义。它似乎可行;它可能会灾难性地失败。它似乎今天工作正常并且明天会失败(或者在应用Windows更新之后,或者使用下一版本的Windows)。

以各种方式强制执行A​​PI分区。构造标题使得难以调用未批准的函数。如果您自己定义该功能或更改WINAPI_FAMILY,您的应用将无法通过Windows应用认证工具包(WACK)流程。我的理解是CLR禁止在运行时调用未经批准的.NET功能,尽管我不太熟悉.NET限制。在任何情况下,我的理解是,如果您的应用程序调用未经批准的功能,则无法按照"Windows 8 app certification requirements"将其提交到商店(请自行阅读这些要求;我没有详细阅读它们,我当然不能为你解释它们。)

如果您不关心将应用程序提交到Windows应用商店,或者只是想编写一些测试应用程序或使用WinRT,那么没有什么可以阻止您尝试调用未经批准的功能。例如,我发现它对create a console window for debugging purposes很有用。这似乎工作正常,我不太关心它是否因Windows Store认证失败,因为它仅用于调试和测试。

答案 1 :(得分:0)

它们不是标准的可执行文件。您只能使用.Net 4.5的一个子集来创建应用程序,这些应用程序不会让您(或者更确切地说,使其非常困​​难)执行MS不希望Metro应用程序执行的任何操作。它们也是非常沙盒化的。

答案 2 :(得分:0)

You have a limited part of the .net api available

  

.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风格应用程序。

There are app store requirements

  

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

Apps are sandboxed

简而言之,你必须提供api。