我正在尝试使用Windows服务将U.are.U 5300指纹设备集成到我的Web应用程序中。我正在使用SignalR来回通信,但这不是问题。我有一小段代码返回了连接到计算机的第一个设备。
public Reader GetReader()
{
if (this._reader == null)
{
this._reader = ReaderCollection.GetReaders()[0];
var openResult = this._reader.Open(Constants.CapturePriority.DP_PRIORITY_COOPERATIVE);
_res = this._reader.GetDefaultRes();
}
return this._reader;
}
我反编译了硬件dll,这是他们使用的实际代码(不确定是否有帮助。)>
public static ReaderCollection GetReaders() { unsafe { ReaderCollection readerCollections; using (Tracer tracer = new Tracer("ReaderCollection::GetReaders")) { Constants.ResultCode resultCode = Constants.ResultCode.DP_DEVICE_FAILURE; if (ReaderCollection.instance == null) { ReaderCollection.instance = new ReaderCollection(); try { ReaderCollection.instance.m_items = new List<Reader>(); NativeMethods.SetDllDirectory(); resultCode = NativeMethods.dpfpdd_init(); tracer.TraceResult((int)resultCode); if (!resultCode.Equals(Constants.ResultCode.DP_SUCCESS) && (int)resultCode != 1) { ReaderCollection.instance = null; throw new SDKException(resultCode, "Could not initialize driver", new InvalidOperationException()); } resultCode = NativeMethods.dpfj_select_engine((IntPtr)0, Constants.EngineType.DP_ENGINE_DPFJ); tracer.TraceResult((int)resultCode); if (!resultCode.Equals(Constants.ResultCode.DP_SUCCESS)) { ReaderCollection.instance = null; throw new SDKException(resultCode, "Could not slect Engine Type", new InvalidOperationException()); } } catch (Exception exception) { tracer.Trace(exception.Message); ReaderCollection.instance = null; throw new SDKException(Constants.ResultCode.DP_FAILURE, string.Empty, null); } } resultCode = Constants.ResultCode.DP_FAILURE; int num = 0; NativeMethods.DPFPDD_DEV_INFO[] dPFPDDDEVINFOArray = null; try { resultCode = NativeMethods.dpfpdd_query_devices(ref num, dPFPDDDEVINFOArray); if (!num.Equals(0)) { dPFPDDDEVINFOArray = new NativeMethods.DPFPDD_DEV_INFO[num]; dPFPDDDEVINFOArray[0].size = Marshal.SizeOf(dPFPDDDEVINFOArray[0]); resultCode = NativeMethods.dpfpdd_query_devices(ref num, dPFPDDDEVINFOArray); tracer.Trace(string.Format("dpfpdd_query_devices called, count is {0}", num.ToString())); } ReaderCollection.Refresh(dPFPDDDEVINFOArray); readerCollections = ReaderCollection.instance; } catch (Exception exception1) { tracer.Trace(exception1.Message); throw new SDKException(Constants.ResultCode.DP_FAILURE, string.Empty, null); } } return readerCollections; } }
此代码在Windows窗体应用程序(桌面应用程序)中可以正常工作。但是它无法在Windows服务中检测到我的设备。
我们是否需要设置任何特殊权限(Windows或应用程序级别)才能检测设备或通过Windows服务进行交互?
我正在尝试使用Windows服务将U.are.U 5300指纹设备集成到我的Web应用程序中。我正在使用SignalR来回通信,但这不是问题。我有一小块...
得到答案:默认情况下,U.are.U SDK将安装DigitalPersona身份验证服务,您需要做的就是禁用此服务!