2016-09-24 114 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构建代理和服务更改为以用户身份运行,启用“允许本地桌面交互”并重新启动服务器。然后我登录时运行了teamcity作业(作为远程桌面)。测试失败:/ –

+0

您无法使用远程桌面登录,因为DirectX应用程序无法在远程桌面会话中运行,它必须是本地登录。如果您没有物理访问权限,则应考虑我在答复中提到的自动登录(这是本地登录)。 – MuertoExcobito

+0

这实际上部分是不真实的。正如我在我的问题中提到的,我可以登录到服务器,在本地运行测试(在Visual Studio中),并且它们通过。因此,在构建服务器上运行的Visual Studio实例能够通过远程桌面登录时获取DirectX设备。只有teamcity agent不能(即使它作为用户登录,与桌面交互):? –

相关问题