WindowsサービスでUNCパスへアクセス出来ない問題の原因

http://bbs.wankuma.com/index.cgi?mode=al2&namber=2412&KLOG=11
Windowsサービスを普通に作ると、

Access to the path 〜 is denied.
パス〜へのアクセスが拒否されました

というエラーが発生してUNCパスへアクセスできない。
これは、Windows サービスの実行に使われる「Local System」(Local Serviceではなく、Local Systemだ!)にネットワーク資源への接続権限が無いからである。

Windows サービスの実行に良く使われる Local System アカウントには、ネットワーク資源への接続権限がありません。

Windows サービスでネットワーク資源にアクセスする必要がある場合、
「ネットワーク資源にアクセスする必要がある Windows サービスを実行するための専用アカウント(=必要最低限の権限に絞込み、余分な処理は許さない)」を
作成して、そのアカウントでサービスを実行するのが一般的な解決策です。


解決方法1

プログラム側は「Local System」でサービスを登録する。
サービスのインストール後に、Windowsの管理者メニューからサービス一覧を表示させて、プロパティからログオンアカウントを設定で実行アカウントを変更する。

解決方法2

プログラムの作成時に、Windows サービスの実行に使われるアカウントを「User」(実行時に指定する)にしてサービスのインストール時にネットワーク資源への接続権限のあるアカウントを指定する。