燈明ブログ

現状は小池啓仁の応援ブログ

VB2005でフォルダやファイルにアクセス権を追加する

開発環境のIDがadministratorsグループに属していて開発したプログラムは、リリースした時に、一般ユーザの人が使うとエラーになる場合があります。
たとえば、CドライブのProgram Files配下は、一般ユーザではアクセス権がありません。
なので、ここにログファイル等を出力しているプログラムは、一般ユーザではアクセスエラーになるのです。
これを回避するには、ログファイル等にフルコントロールのEveryoneを追加すればよいですね!
ネットで検索したら、良いサンプルがあったので引用メモさせて頂きます。


インストール時にadministratorsグループのIDのインストールプログラムで、以下のロジックを使って、一般ユーザがアクセスするところにフルコントロールのEveryoneを追加しときます。あくまでも、admin権限で行い、間違って一般ユーザ権限で行うとエラーします。
しかし、一般ユーザでもアクセスできるところにログファイル出力等をするようにして、上記は、ほどほどに…セキュリティに問題がでますので…。

◆フォルダのEveryoneに対し、フルコントロールの許可

Imports System.Security.AccessControl

Public Class ACLSample
  Public Shared Sub Main()
    Dim DirInfo As New System.IO.DirectoryInfo("D:\test")
    Try
      Dim DirSec As DirectorySecurity
      DirSec = DirInfo.GetAccessControl()
      'アクセス権限を指定
      'Everyoneに対し、フルコントロールの許可
      '(サブフォルダ、及び、ファイルにも適用)
      Dim AccessRule As New FileSystemAccessRule( _
        "Everyone", _
        FileSystemRights.FullControl, _
        InheritanceFlags.ContainerInherit, _
        PropagationFlags.None, _
        AccessControlType.Allow)

      'アクセス権限を追加
      DirSec.AddAccessRule(AccessRule)
      DirInfo.SetAccessControl(DirSec)
    Catch ex As Exception
      Debug.WriteLine(ex.Message)
    End Try
  End Sub
End Class
http://blog.livedoor.jp/akf0/archives/51465466.html

◆ファイルのEveryoneに対し、フルコントロールの許可

Imports System.Security.AccessControl

Public Class ACLSample
  Public Shared Sub Main()
    Dim FileInfo As New System.IO.FileInfo(path)
    Try
      Dim FileSec As FileSecurity
      FileSec = FileInfo.GetAccessControl()
      'アクセス権限を指定
      'Everyoneに対し、フルコントロールの許可
      '(サブフォルダ、及び、ファイルにも適用)
      Dim AccessRule As New FileSystemAccessRule( _
        "Everyone", _
        FileSystemRights.FullControl, _
        AccessControlType.Allow)

      FileSec.AddAccessRule(AccessRule)
      FileInfo.SetAccessControl(FileSec)
    Catch ex As Exception
      MessageBox.Show(ex.Message)
    End Try
  End Sub
End Class
http://blog.livedoor.jp/akf0/archives/51465450.html

詳しくは、引用先にアクセスしてみてください!