ローカルマシンでWindowsサービスを実行しています。 NT AUTHORITY\NETWORK SERVICEで実行するように構成されています。プログラムは、同じサブネット内のコンピューター上のネットワーク共有ドライブにアクセスします。その共有ディレクトリでは、Everyoneがフルコントロールに設定されています。
File.ExistsでFalseが出ますが、ファイルは存在します。これは許可の問題だと思います。忘れ物はありますか?共有ドライブのあるコンピュータはドメイン上にないことに注意してください。
解決策はここにあります: https://serverfault.com/questions/177139/windows-service-cant-access-network-share
共有ドライブを持つマシンがドメイン上にないという事実は、あなたの主な問題です。これを機能させるには、Windowsサービスを特定のユーザーとして実行するように構成する必要があります。次に、リモートシステム上に同じパスワードで同一のユーザーを作成する必要があります。それでうまくいくかもしれません。
この問題は、ドメインにないマシンにログインするためには、そのマシンに存在するアカウントを使用してそのマシンにログインする必要があるという事実から生じます。他のもののマシンアカウントは、そのローカルマシン上には存在しません。同じパスワードで同じユーザーを作成することにより、ログインを機能させることができる場合があります。」
-sysadmin1138
両方のマシンで同じアカウントを作成しましたが、サービスアカウントは共有ドライブにアクセスできました。同じドメインにサーバーを配置する方がより良いソリューションなので、私はそれに向けて取り組んでいますが、これは当面は機能します。
ブライアンTは正しかった。しかし、私は何かを追加したいと思います。サービスが同じDOMAIN\Userで実行されていたにもかかわらず、この問題が発生しました。私たちのサービスは共有フォルダー/ドライブにファイルを書き込もうとしていて、config.xmlで次のように構成されていました:I:/ path/to/the/file/to/write。
しかし、ドライブ文字の代わりにネットワークのIPアドレスを使用するように構成を変更すると、問題を解決することができました。ただし、構文は少し変更されました。
\\ xxx.xxx.xx.xx\path\to\the\folder\to\write
これがまだ問題を解決していない人を助けることを願っています
共有権限を設定するだけでは不十分です。また、NTFSアクセス許可を適切に設定すると、機能します。共有に対する全員のフルコントロールとは、全員がネットワークを介して共有のルートに到達できることを意味しますが、それ以降はNTFS権限を使用して、許可するものと許可しないものを決定します。