当从服务调用SCardEstablishContext时,为什么会挂起,从不返回?SCardEstablishContext作为服务挂起
我有很多Windows安装正常工作的代码。它访问Cherry键盘的智能卡读卡器(6x44)以读取智能卡上的数据。它在大多数试用过的电脑上都能正常工作。但是,在一些使用西班牙语Windows在西班牙运行的PC上,SCardEstablishContext函数不会返回。我无法弄清楚为什么会这样。我有日志记录的任何一方,但日志条目没有出现。然后我不能关闭它(工作线程卡住了),并且必须杀死它。
如果从应用程序运行而不是服务,完全相同的线程代码工作正常。给用户的服务登录设置而不是系统没有区别。 我在这台机器上安装了西班牙语XP,但它工作得很好。远端具有与我在这里相同的Winscard.dll版本(均在XP SP3状态下)。事件日志中没有显示错误。
我该如何解决哪里出了问题,以及可能会解决什么问题? (下面Delphi代码)
// based on code by Norbert Huettisch
function TPCSCConnector.Init: boolean;
var
RetVar: LongInt;
ReaderList: string;
ReaderListSize: integer;
v: array[0..MAXIMUM_SMARTCARD_READERS] of string;
i: integer;
begin
Result := false;
FNumReaders := 0;
{$IFDEF MJ_ONLY}
LogReport(leInformation, 'About to call SCardEstablishContext');
{$ENDIF}
RetVar := SCardEstablishContext(SCARD_SCOPE_USER, nil, nil, @FContext);
{$IFDEF MJ_ONLY}
// never gets to report this (and logging known good etc)
LogReport(leInformation, 'SCardEstablishContext result = ' + IntToStr(RetVar));
{$ENDIF}
if RetVar = SCARD_S_SUCCESS then
begin
它与“允许服务与桌面交互”设置有关吗? – 2009-04-14 16:04:27
好的想法,但没有,已经尝试过,并没有影响任何东西。 – mj2008 2009-04-15 15:19:33