2

サードパーティライブラリの関数を呼び出すWindows サービス ( Delphi XE2 ) を作成しています。COMライブラリのコアCOMはかなり古く、ドライブ文字がデータ ファイルの場所にマップされている必要があります。UNCパスでは絶対に機能しません。私のサービスでは、サービスが利用可能であることを確認するために、サービスの開始時にドライブ文字を接続しています。API 呼び出しを使用してWNetAddConnection2、戻り値を確認しています。ドライブ文字がすでに使用されていない限り ( ERROR_ALREADY_ASSIGNED)、ドライブは正常に接続されていますが、いずれの場合も COM 機能は正常に動作します。私が抱えている問題は、サービスが停止したときに発生します。サービスが停止したときにドライブを切断すると (WNetCancelConnection2)およびサーバー上の他のアプリケーション/サービスがドライブ文字を使用している場合、それらは影響を受けて接続が失われます。ただし、サービスが停止したときにドライブを切断しないと、ドライブが「失われ」、他のサービスから接続できなくなります。

これはすべて、ドライブ マッピングを作成するセッション/サービスがドライブ マッピングを「所有」する方法に関係していると確信していますが、正しい解決策が何であるかはわかりません。現在、 「Local System」の下でサービスを開始しています。Microsoft は、サービスがマップされたドライブを使用しないことを常に推奨していることを知っていますが、選択の余地がありません。以前にこの問題に遭遇した人はいますか?何か推奨事項はありますか?

4

3 に答える 3

4

現在、「Local System」でサービスを開始しています

別のユーザー アカウントを試してください。

Windows のセキュリティ上の理由により、ローカル システムはローカルに保持されます - IOW はネットワーク アクセスを禁止されています

于 2013-01-23T11:33:55.923 に答える
0

ドライバー文字は、ユーザーごとに割り当てられます。サービスのドライブ文字の割り当てが他のアプリやサービスに影響を与える唯一の方法は、それらがすべて同じユーザー アカウント内で実行されている場合です。アプリは、LocalSystemとして実行されているサービスによって起動されない限り、アカウントで実行されませんLocalSystem(ただし、ユーザーには表示されません)。そのため、サービスのドライブ文字の割り当てをサービスだけに分離したい場合は、サービスを実行するための専用のユーザー アカウントを作成します。これにより、そのユーザー アカウントのアクセス許可をカスタマイズして、ネットワークにアクセスできるようにすることもできます。実際に必要でない場合は、完全なシステム アクセスを必要としません。

于 2013-01-23T18:49:33.700 に答える
0

試す:

  1. 接続専用のユーザー アカウントを作成します* ;
  2. このユーザーを WNetAddConnection2 に渡します。

詳細については、こちらをご覧ください。

*ワークグループでは、このアカウントを宛先マシンにミラーリングする必要があります + GPEdit を使用して宛先 PC のセキュリティ モデルを「クラシック」に設定する必要があります

于 2013-01-23T13:14:06.477 に答える