我正在开发一个 Windows 服务来捕获指纹样本。WBF (Windows Bio metric Framework) 需要焦点来捕获样本图像,为此我使用 AcquireFocus()。
从 DLL 导出如下。
class Focus
{
protected const string LibName = "winbio.dll";
[DllImport(LibName, EntryPoint = "WinBioAcquireFocus")]
public static extern WinBioErrorCode WinBioAcquireFocus();
[DllImport(LibName, EntryPoint = "WinBioReleaseFocus")]
public static extern WinBioErrorCode WinBioReleaseFocus();
}
用法如下
WriteToFile(DateTime.Now + " Acquiring Focus" + "\n");
re = Focus.WinBioAcquireFocus();
if (re.Equals(WinBioErrorCode.Ok)){
WriteToFile(DateTime.Now + " Calling CaptureSample Image." + "\n");
result = wbf.CaptureSampleImage();
}
else{
WriteToFile(DateTime.Now + " Error in Acquiring Focus: " + re + "\n");
}
此功能要求进程在文档中提到的 LocalSystem 帐户上运行。我已经在服务设置中设置了这个。
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
CaptureSampleImage() 在 DLL 中定义。现在我总是收到错误 0x80070005,即拒绝访问。日志文件如下。
10/22/2019 4:16:06 PM Acquiring Focus
10/22/2019 4:16:06 PM Error in Acquiring Focus: AccessDenied
10/22/2019 4:16:06 PM Stopping Service.
错误代码定义为 Enum 如下
public enum WinBioErrorCode
: uint
{
Ok = 0,
False = 1,
AccessDenied = 0x80070005,
...
}
文档说这是由于服务不在 LocalSystem 上而引起的,而它是。
出于记录目的,我编写了 writeToFile(message),将消息写入 .txt 文件。
我该怎么做才能消除此错误?
提前致谢。