サードパーティライブラリの関数を呼び出すWindows サービス ( Delphi XE2 ) を作成しています。COM
ライブラリのコアCOM
はかなり古く、ドライブ文字がデータ ファイルの場所にマップされている必要があります。UNC
パスでは絶対に機能しません。私のサービスでは、サービスが利用可能であることを確認するために、サービスの開始時にドライブ文字を接続しています。API 呼び出しを使用してWNetAddConnection2
、戻り値を確認しています。ドライブ文字がすでに使用されていない限り ( ERROR_ALREADY_ASSIGNED
)、ドライブは正常に接続されていますが、いずれの場合も COM 機能は正常に動作します。私が抱えている問題は、サービスが停止したときに発生します。サービスが停止したときにドライブを切断すると (WNetCancelConnection2
)およびサーバー上の他のアプリケーション/サービスがドライブ文字を使用している場合、それらは影響を受けて接続が失われます。ただし、サービスが停止したときにドライブを切断しないと、ドライブが「失われ」、他のサービスから接続できなくなります。
これはすべて、ドライブ マッピングを作成するセッション/サービスがドライブ マッピングを「所有」する方法に関係していると確信していますが、正しい解決策が何であるかはわかりません。現在、 「Local System」の下でサービスを開始しています。Microsoft は、サービスがマップされたドライブを使用しないことを常に推奨していることを知っていますが、選択の余地がありません。以前にこの問題に遭遇した人はいますか?何か推奨事項はありますか?