2016-09-24 17 views
1

DirectXを使用するビジュアルWPFコントロールライブラリをテストするために、DirectXシーンを作成するいくつかの単体テストを作成しました。TeamcityビルドサーバーのユニットテストでD3DERR_NOTAVAILABLE

これは脆弱なユニットテスト手法(視覚的な比較)ですが、多数の可能な組み合わせをカバーするのに役立ちます。

SharpDX.SharpDXException : HRESULT: [0x8876086A], Module: 
[SharpDX.Direct3D9], ApiCode: [D3DERR_NOTAVAILABLE/NotAvailable], Message: Unknown 
    at SharpDX.Result.CheckError() 
    at SharpDX.Direct3D9.D3D9.Create9Ex(Int32 sDKVersion, Direct3DEx arg1) 
    at SharpDX.Direct3D9.Direct3DEx..ctor() 

しかし、私は、ビルド・サーバーにログインし、テストを実行する場合、彼らは渡す:私が持っている

問題は、テストはローカルでうまく実行されますが、エラーでビルドサーバー上の失敗であります!

Unit Tests when run on server - pass!

ビルドサーバーは、Windows Server 2012 R2で、DirectX10のワープ(ソフトウェア)ドライバを持っている(下記参照)。

related to this issue hereチームビルドエージェントのユーザープロファイルでDirectXデバイスを取得できないと思われます。私はTeamcityサービスを変更しました。TeamCityはユーザーとしてログオンするエージェントを作成しますが、まだ運がありません。

アイデア?

+0

サービスがデスクトップとやりとりする必要がありますか? – rene

+0

それはそれのようなものです。それが可能かどうかわからない)b)可能であれば、どのように構成するか。 –

+0

ooサービスでチェックボックスを見ただけです - > Teamcity Build Agent - >でログオンしてください!私はそれを試してみる... –

答えて

1

TeamcityエージェントでDirectXドライバを使用するテストを実行するには、サービスがユーザーアカウント(たとえば、エージェントサービスがデフォルトであるSYSTEMのアカウントではない)で実行されていることを確認する必要があります。さらに、そのアカウントは現在エージェントコンピュータにログオンしている必要があります。アカウントをログインせずに、アクティブデスクトップはありません(DirectXの初期化に必要です)。

コメントから、あなたは既にサービスが実行されているアカウントを変更する方法を見つけたようです(例えば、How can I change the user identity that runs a build agent in TeamCity?で説明)。サービスが常にログインしているようにユーザーアカウントを設定するには、Windows Automatic Loginを設定することを検討してください。また、設定に応じて、手動でコンピュータにログインすることもできます。

追加のヒントとして、リモートデスクトップは、ログインしたユーザーのデスクトップに問題を引き起こし、DirectXの初期化に失敗することがあります。エージェントをリモートで表示したい場合は、そのような問題を引き起こさないVNC(または同等のもの)を使用することができます。

+0

それは素晴らしい答えですが、私はすでにそれを試みました。 Teamcityビルドエージェントとサービスをユーザーとして実行するように変更し、「ローカルデスクトップの相互作用を許可する」を有効にしてサーバーを再起動しました。私はログインしている間に(リモートデスクトップとして)チームシップジョブを実行しました。テストは失敗しました:/ –

+0

DirectXアプリケーションはリモートデスクトップセッションで実行できないため、リモートデスクトップでログインすることはできません。ローカルログインでなければなりません。マシンに物理的にアクセスできない場合は、自分の答えに記載されている自動ログイン(ローカルログイン)を考慮する必要があります。 – MuertoExcobito

+0

これは実際には部分的に真実ではありません。私の質問で言及したように、私はサーバーにログインし、テストをローカルで(ビジュアルスタジオ内で)実行してパスすることができます。ビルドサーバーで実行されているVisual Studioインスタンスは、リモートデスクトップ経由でログインしたときにDirectXデバイスを取得できます。ちょうどチームシティエージェントは(デスクトップインタラクションのユーザーとしてログインしていても)できません: –

関連する問題