2

Windows 8 の新しい Metro スタイル / WinRT アプリには、呼び出すことができる API に関して特定の制限があります。また、非同期の手法を使用する必要があり、アプリを一時停止可能にする必要があります。どのように、そしてこれらすべてが強制されるかどうか疑問に思っています。

新しい Metro アプリは単なる実行可能なプログラムですか、それとも何か別のもの (たとえば、一連の定義済みインターフェイスを備えた COM コントロールのようなもの) ですか? API 制限は、コンパイル時、実行時 (サンドボックスなどを介して)、または単に Windows ストア ポリシーを介して (iOS の状況と同様に) どのように適用されますか? よこしまな感じがするなら、たとえば、画面のハンドルを取得してインターフェイスを操作したり、上部にフローティング ウィンドウを追加したり、バックグラウンドで何かを起動したり、Metro の制限から抜け出すことはできますか?

私が尋ねている理由の 1 つは、Python 用の WinRT ライブラリを作成して、Metro アプリの作成に使用できるようにすることを検討しているためです。ただし、Python コアは明らかに WinRT 以外の API 呼び出しを多数使用しているため、最初から運命づけられている可能性があります。また、Metro アプリ全般の構造についても触れたいと思います。


編集:このスレッドによると、C ランタイムのすべての機能が利用可能です。禁止された関数を呼び出すものをコンパイルできるようですが、「アプリケーション検証ツール」は文句を言います。ストアを気にしないのであれば、そのようなハイブリッドアプリを実行できるかどうか疑問に思っています(そして、禁止されている機能の回避策を書いて、後でストアと互換性があるようにするかもしれません)...

4

3 に答える 3

5

MetroスタイルのWindowsStoreアプリで実行できることには、(少なくとも)2つの別個の技術的制限があります。

1つ目は、一連のセキュリティ制限です。WindowsStoreアプリは低い特権で実行されるため、システムの他の部分との対話を許可する方法が制限されます。たとえば、Windowsストアアプリはファイルシステム内の任意の場所にアクセスできず、事前定義された場所のセット内のファイルと、システムが明示的にアクセスを許可するファイルにのみアクセスできます。これらのセキュリティ制限に違反することはできません(可能であれば、それはかなり問題のあるオペレーティングシステムのバグになります)。

2番目の制限セットはAPIパーティショニングです。Windowsストアアプリは、アプリパーティションに存在するシステム関数の呼び出しのみが許可されています。MSDNの各システム関数のドキュメントには、関数がアプリパーティションに存在するかどうかが指定されています。関数を定義するヘッダーファイルを調べることでもわかります。関数は、プロジェクトの対象となるAPIパーティションに応じて条件付きで定義されます。WINAPI_FAMILYマクロがこれを制御します(詳細については、Windows SDKのwinapifamily.hを参照してください)。

「未承認」関数を呼び出すと、結果は未定義になります。動作しているように見えるかもしれません。壊滅的に失敗する可能性があります。今日は正常に動作し、明日は壊滅的に失敗するように見える場合があります(または、Windows Updateが適用された後、または次のバージョンのWindowsで)。

APIパーティショニングは、さまざまな方法で実施されます。ヘッダーは、未承認の関数を呼び出すことが難しいように構成されています。関数を自分で定義するか、を変更するWINAPI_FAMILYと、アプリはWindows App Certification Kit(WACK)プロセスに失敗します。私の理解では、CLRは、実行時に未承認の.NET機能への呼び出しを禁止していますが、.NETの制限についてはあまり詳しくありません。いずれにせよ、アプリが未承認の関数を呼び出すと、 「Windows 8アプリの認定要件」に従って、ストアに送信できないことを理解しています(ただし、これらの要件を自分で読んでください。詳細は読んでいません。私は確かにあなたのためにそれらを解釈することはできません)。

アプリケーションをWindowsストアに送信する必要がない場合、またはテストアプリを作成したり、WinRTで遊んだりしたい場合は、承認されていない関数を呼び出そうとするのを妨げるものは何もありません。たとえば、デバッグ用のコンソールウィンドウを作成すると便利だと思います。これは正常に機能しているように見えます。デバッグとテスト専用であるため、Windowsストアの認定に失敗してもかまいません。

于 2012-08-21T15:53:18.610 に答える
0

利用可能な .net API の限られた部分があります

.NET Framework は、C# または Visual Basic を使用して Windows 用の Metro スタイル アプリを作成するために使用できるマネージド型のサブセットを提供します。このマネージド型のサブセットは、Windows ストア アプリ用の .NET と呼ばれ、.NET Framework 開発者が使い慣れたプログラミング フレームワーク内で Metro スタイル アプリを作成できるようにします。Metro スタイル アプリの開発に関連しない型は、サブセットに含まれません。

これらのマネージド型を Windows ランタイム API の型と共に使用して、Metro スタイル アプリを作成します。通常、マネージド型は System で始まる名前空間に存在し、Windows ランタイム型は Windows で始まる名前空間に存在することを除いて、マネージド型と Windows ランタイム型の使用に違いはありません。Windows ストア アプリ用の .NET と Windows ランタイムを組み合わせることで、C# または Visual Basic を使用して Metro スタイル アプリを開発するために使用できる型とメンバーの完全なセットが提供されます。

アプリ ストアの要件があります

3.1 Metro スタイル アプリの機能を実装するには、Metro スタイル API のみを使用する必要があります。これらの API については、Metro スタイル アプリ API リファレンスで説明しています。アプリは、Windows ストアにリストされているソフトウェアにのみ依存する場合があります。

アプリはサンドボックス化されています。

つまり、提供された API を使用する必要があります。

于 2012-08-20T15:25:14.250 に答える
0

それらは標準の実行可能ファイルではありません。.Net 4.5 のサブセットに制限されて、MS が Metro アプリに実行させたくないことを実行させない (というか、非常に困難にする) アプリケーションを作成します。それらはかなり重くサンドボックス化されています。

于 2012-08-20T15:19:25.703 に答える