UnauthorizedAccessException は、ファイル/フォルダ/レジストリなどへのアクセスが OS に拒否されたときに出る。権限・読み取り専用・排他ロックが典型。
先に結論
- 例外メッセージのパスと、プロセスの実行アカウントを確認
- IIS / サービス / コンテナは「ログインユーザー」と権限が違う
- 読み取り専用属性、他プロセスのロック、ACL 拒否を疑う
- 書き込み先をプログラム用ディレクトリ(AppData 等)へ寄せると楽なことが多い
よくある原因
- Program Files 配下への書き込み
- ネットワーク共有の権限不足
- ファイルが他プロセスに開かれている
- Docker ボリュームの user 不一致
- レジストリ HKLM への一般ユーザー書き込み
切り分け
- パスと操作(Read/Write/Delete)を特定
- 実行 ID(アプリプール、サービスアカウント)を確認
- エクスプローラ / icacls / コンテナ user で ACL を確認
- 読み取り専用・ロックの有無
- 再現が特定マシンだけならポリシーや AV も疑う
対策
- 書き込み可能なデータディレクトリを使う
- 必要最小限の ACL を付与(Everyone Full は避ける)
- ファイル共有は FileShare を適切に
- 失敗時はパスと操作をログ(パスワードは出さない)
ざっくりまとめ
- 誰が・どこへ・何をしたかを揃える
- 実行アカウントの違いが最大の罠
- 書き込み先設計で再発を減らす
関連記事