當從服務調用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