1

CompositionCapabilities.GetForCurrentViewを呼び出すと、次の例外が発生します。CompositionCapabilities.GetForCurrentViewを呼び出すときにアクセスが拒否されました

System.UnauthorizedAccessException: 'アクセスが拒否されました。 ( HRESULTからの例外:0x80070005(E_ACCESSDENIED))」

public App() 
{ 
    this.InitializeComponent(); 
    this.Suspending += OnSuspending; 

    // Exception happens here. 
    var capabilities = CompositionCapabilities.GetForCurrentView(); 
} 

奇妙なことは、コードをので、私はAPIが利用可能であると仮定OKコンパイルです。 Package.appxmanifestの機能を宣言する必要はありますか?

+0

ヒント:App.InitializeComponent()の直後に、自分のクラスでも何かを呼び出さないでください。 – LucaLindholm

答えて

2

何も宣言する必要はありません。このメソッドは単に早すぎると呼ばれます。

だからではなく、コンストラクタでそれを呼び出すのでは、ウィンドウが作成された直後にそれを呼び出す - あなたは、コードのように、そのAPIがあまりにもサポートされているかどうかを確認するためのチェックを追加することになるでしょう

protected override void OnWindowCreated(WindowCreatedEventArgs args) 
{ 
    if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 4)) 
    { 
     var capabilities = CompositionCapabilities.GetForCurrentView(); 
     var areEffectsSupported = capabilities.AreEffectsSupported(); 
     var areEffectsFast = capabilities.AreEffectsFast(); 
    } 

    base.OnWindowCreated(args); 
} 

注意上記。

関連する問題