6

Directory.Exists()特定のディレクトリがドライブに存在するかどうかを確認するために、Windows サービス (C#、3.5 フレームワークでプログラムされている) を使用しています。ローカル マシンで実行すると、正常に動作します。つまり、ディレクトリにアクセスできます。

しかし、Windows サービスを仮想マシンにデプロイしてサービスを開始すると、ディレクトリが存在していてもディレクトリを見つけることができません。ディレクトリは次のようにマップされます

 Q: drive, Q:\\temp\\local\\ folder 

ただし、Windows サービスは Directory.Exists() に対して常に false を返します。

C:\ driveただし、代わりに与えるQ:\と機能しますが、マップされたドライブでは機能しません。UNC パスを試してみましたが、マップされたドライブに管理者権限があり、読み取り、書き込み、および実行のアクセス許可があることを確認しました。しかし、それでも false を返します。

理由を教えてください。そして解決方法は?

4

5 に答える 5

6

サービスが実行されているのと同じユーザーでドライブがマップされていることを確認してください。ドライブをユーザー A としてマップすると、他のユーザーにも自動的にマップされません。

于 2013-09-05T09:13:46.687 に答える
4

マップされたドライブは、通常、サービスが実行されない対話型ログイン中にのみ復元されます。

サービスが使用するネットワーク ドライブをマップする

短いバージョン: できません。代わりに完全な UNC パスを使用してください。

于 2013-09-05T09:22:10.790 に答える
1

これはおそらく特権の問題です。Windows サービスは、ネットワーク パスにアクセスするための十分な権限を持たないアカウントで実行されている可能性があります。

これは重複の可能性があります: C# で記述された Windows サービスからマップされたフォルダーにアクセスする

別の可能な解決策は、偽装を使用することです。確認してください: http://msdn.microsoft.com/en-us/library/w070t6ka(v=vs.90).aspx

アップデート

考えてみました。アプリケーション プールの ID を、自分のユーザーと同じ権限を持つユーザーに変更してみてください。

于 2013-09-05T09:13:55.620 に答える
0

トラブルシューティングの手順

  1. 「ファイル名を指定して実行」でネットワークパスに手動でアクセスしてみる [WindowKey + R]
  2. マップドライブにアクセスしてみてください: M:\
  3. あなたがマッピングのアカウント所有者であることを確認してください (マッピングはあなたのアカウントで行う必要があります)。
  4. プロパティに移動し、「管理者として実行」がチェックされていないかどうかを確認します。
  5. マッピングを削除して、マッピングを再度追加します。
  6. オフラインで使用可能 (またはオフラインで同期) がオフになっていて、フォルダーが別のコンピューターから使用可能であることを確認します。

お役に立てれば!

于 2018-03-14T14:41:58.137 に答える