出于某些原因,我必须在我的程序中创建D3D9,该程序作为服务运行。
但我得到D3DERR_NOTAVAILABLE
以下代码:
ATL::CComPtr<IDirect3D9Ex> d3d9 = nullptr;
HRESULT hr = ::Direct3DCreate9Ex(D3D_SDK_VERSION, &d3d9);
如果它没有在服务中运行,它就可以工作。
我通过检查控制面板中的Allow service to interact with desktop
看到有人成功完成此操作,但它对我不起作用。
我有什么设定吗?
答案 0 :(得分:2)
在Windows Vista及更高版本中,Windows服务在隔离的上下文中运行(称为“会话0隔离&#39;”)以减少恶意软件的威胁。在某些情况下,您可以创建一个NULL设备,也可以创建一个WARP设备,但在Windows 8之前,Windows服务中的Direct3D GPU访问不可用。
请参阅KB 978635