サービスから呼び出されたときにSCardEstablishContextがハングし、返されないのはなぜですか?SCardEstablishContextがサービスとしてハングする
多くのWindowsインストールでうまく動作するコードがあります。それは、チェリーキーボードのスマートカードリーダー(6x44)にアクセスして、スマートカード上のデータを読み取る。それは試みられているほとんどのPCで正常に動作します。ただし、スペイン語版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
「サービスとデスクトップとの対話を許可する」設定に関係していますか? –
いい考えですが、それは試されていて影響を与えませんでした。 – mj2008