在Windows 8中的WinRT上动态代码执行(C++或.NET/C#)?

Jer*_*ell 11 c# c++ dll windows-8 windows-runtime

Windows 8 metro下的WinRT是否允许您动态加载和执行代码?例如,是否可以将dll下载到内存或隔离存储并从中运行代码?可以编写JIT编译脚本语言到本地汇编语言(例如第三方浏览器)的代码能够在WinRT中执行相同的操作,还是禁止将其作为"不安全"操作?

对于在WinRT中运行的"托管"代码,这个问题的答案是否有所不同?例如,在托管代码中,您是否可以从Internet下载程序集并使其在MEF中可被发现或以其他方式在运行时加载它?你能用某种形式的Reflection.Emit吗?在C++中,您可以运行应用程序在运行时生成的汇编代码,还是在运行时动态加载DLL(可能是某种形式的WinRT DLL)?

Ste*_*owe 11

通常,您无法在Metro风格应用中加载和执行新代码.您可以访问的是您随应用程序提供的内容.

缺少LoadLibrary和GetProcAddress,因此C++无法动态加载代码.
同样,C#也不能,因为没有Assembly.Load.
JavaScript可以,但只能在Web容器中,而不是在代码的更全面的信任部分.

所有这一切的原因是,如果应用程序只能加载和运行任意代码,商店的安全/恶意软件保护将没有实际意义.

  • 此外,缺少VirtualProtect,因此您无法编写可动态编译代码的内容. (5认同)

小智 8

事实上,Metro风格应用CAN动态加载和执行代码.有一些限制; Metro和Desktop应用程序在关键方面的工作方式略有不同.

机制有所不同,具体取决于调用者(LoadPackagedLibrary()Assembly.Load()等).Metro和桌面之间的一个关键区别 - Metro应用程序只能动态加载应用程序包图(包和s)和系统代码(可以静态加载)中的内容.

有关更多详细信息,请参阅我的帖子 http://social.msdn.microsoft.com/Forums/en-US/wingameswithdirectx/thread/d1ebe727-2d10-430e-96af-46964dda8225


cdi*_*ins 7

Windows 8 metro下的WinRT是否允许您动态加载和执行代码?

没有.

例如,是否可以将dll下载到内存或隔离存储并从中运行代码?

没有.

可以编写JIT编译脚本语言到本地汇编语言(例如第三方浏览器)的代码能够在WinRT中执行相同的操作,还是禁止将其作为"不安全"操作?

这将被禁止.

对于在WinRT中运行的"托管"代码,这个问题的答案是否有所不同?

没有.

例如,在托管代码中,您是否可以从Internet下载程序集并使其在MEF中可被发现或以其他方式在运行时加载它?

没有.

你能用某种形式的Reflection.Emit吗?

没有.

在C++中,您可以运行应用程序在运行时生成的汇编代码,还是在运行时动态加载DLL(可能是某种形式的WinRT DLL)?

没有.

您描述的所有内容都可以避免WinRT的安全保障.


Yah*_*hia 2

你的问题有点不清楚......所以一些一般性的指示:

  • .NET 应用程序使用 WinRT(但不是新的 UI 模型!)
    在这种情况下,您今天的一切皆有可能(也许不是 OLEDB),但反射等。

  • 为 Metro UI 构建的 .NET 应用程序
    AFAIK 这是不可能的(请参阅http://blogs.microsoft.co.il/blogs/sasha/archive/2011/09/17/metro-net-framework-profile-windows-tailored。 aspxhttp://tirania.org/blog/)至少只要您想通过 Windows 应用商店进行销售...在此范围(Windows 应用商店)之外,可能有一些技巧可以规避该限制,正如一些人已经演示的那样。 ..但我不会指望这一点...也许你可以使用一些JavaScript(eval等)来做一些动态的事情,但我目前不确定

  • 问题已经很清楚了,是关于WinRT的。您正在回答另一个未提出的问题。海报中没有提到运行 WinRT 以外的东西的 .NET 应用程序。 (3认同)