VB のたまご

作成日: 2015/12/03, 更新日: 2015/12/03


UnauthorizedAccessException について

概要

  •  UnauthorizedAccessException は、指定のファイルやフォルダに対するアクセス権が無いために発生する例外エラーです。 エクスプローラ等からプロパティ設定を確認することが、解決の糸口につながります。 ASP.NET の Web アプリケーションの場合は、処理を行ってくれるサービスアカウントが、権限を持っていないことが原因の場合があるみたいです。 勉強不足のため、本記事では、クライアントアプリケーションを前提に記載します。


スポンサーリンク


事例と対処方法

  •  以下のサンプルは、意図的に例外エラーを発生させるコードです。 実際の業務プログラムでは、このような簡単なコードではないと思いますが、例外発生させている、直接的な原因となる部分として参考になるはずです。 また、本例外エラーが発生してしまう原因となった、根本的な原因となる別の例外エラーが、さらに奥深くにいる場合があります。 (本例外エラーは間接的に影響を受けて発生してしまったもので、本当の原因となる例外エラーを食い止めることで、本例外エラーも直る場合があります。)

  •  このような組み合わせのパターンは、本例外エラーに限らず、他の例外エラー全般にも言えることですが、そんなに頻繁に出くわすものではないと思いますので、 そういう場合もあるということだけ、覚えておいていただけると解決しやすくなるのではと思います。

  •  また、記載の対処方法は、あくまでも一例です。 他の対処方法の方が、その業務プログラムにとってベストプラクティスとなる場合もありますので、検討材料の1つという程度に確認していただければと思います。

  • スポンサーリンク



  • File.ReadAllText
  • Dim logFile As String = "C:\Temp\myapp.log"
    Dim logData As String = File.ReadAllText(logFile)
    
    ' 例外エラー
    System.UnauthorizedAccessException: パス 'C:\Temp\myapp.log' へのアクセスが拒否されました。
       場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       場所 System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
       場所 System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
       場所 System.IO.File.ReadAllText(String path)
    
    ' 対処方法
    エクスプローラ等からファイル、またはフォルダのアクセス権を確認する
    
  •  サンプルのログファイルは、あらかじめアクセス権を厳しく設定し直しています。( Administrators グループのアクセスレベルを「読み取り」だけに変更)。 ファイルやフォルダには、アクセスできるレベル(読み込みだけ、読み書きOK、等)とアクセスできるユーザ(一般ユーザ、管理者、営業部門、システム部門、等)を設定できます。 この設定が厳しい場合は、プログラムからのアクセスができない場合があり、本例外エラーはこれにひっかかり発生しました。 ファイルのアクセス権を元に戻すことで、アクセス可能になります。
  •  それでもアクセス拒否される場合、もし仕様変更できるのであれば、実行ファイルを格納しているフォルダやユーザデータフォルダ等に、 管理場所を変更するという折衷案もあります。

  •  最後までこの記事を読んでいただき、ありがとうございました。

  • スポンサーリンク