【解決方法】System.UnauthorizedAccessException

[ad_1]

以前にこれに遭遇して修正したことは知っていますが、答えが見つかりません

デザイン モードでは問題なく動作するプロジェクトがありますが、デプロイ後にエラーが発生します
System.UnauthorizedAccessException: パス ‘C:\Program Files\…\Prison Alarm Manager\Errors\’ へのアクセスが拒否されました。

エラーがこのコードから発生していることはわかっていますが、修正方法を思い出せません。

Dim fs As FileStream = New FileStream(Application.StartupPath & "\Errors\errlog.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)

それが役立つはずの完全な手順

VB
Public Sub WriteToErrorLog(ByVal msg As String, ByVal stkTrace As String, ByVal title As String)

      'check and make the directory if necessary; this is set to look in the application
      'folder, you may wish to place the error log in another location depending upon the
      'the user's role and write access to different areas of the file system
      If Not System.IO.Directory.Exists(Application.StartupPath & "\Errors\") Then
          System.IO.Directory.CreateDirectory(Application.StartupPath & "\Errors\")
      End If


      'check the file
      Dim fs As FileStream = New FileStream(Application.StartupPath & "\Errors\errlog.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)
      Dim s As StreamWriter = New StreamWriter(fs)
      s.Close()
      fs.Close()

      'log it
      Dim fs1 As FileStream = New FileStream(Application.StartupPath & "\Errors\errlog.txt", FileMode.Append, FileAccess.Write)
      Dim s1 As StreamWriter = New StreamWriter(fs1)
      s1.Write("Title: " & title & vbCrLf)
      s1.Write("Message: " & msg & vbCrLf)
      s1.Write("StackTrace: " & stkTrace & vbCrLf)
      s1.Write("Date/Time: " & DateTime.Now.ToString() & vbCrLf)
      s1.Write("===========================================================================================" & vbCrLf)
      s1.Close()
      fs1.Close()

  End Sub

解決策 1

アクセスしようとしているフォルダーに適切なセキュリティ権限を付与する必要があります。

現在、書き込もうとしているファイルは読み取り専用であるか、ASPNET ユーザーにアクセス許可がない必要があります。 偽装を使用している場合は、そのユーザーに書き込み権限を付与する必要があります。
:いいぞ:

解決策 2

保存先のパスを ProgramFiles から User/AppData に変更して修正しました

<pre lang="vb">Dim pAppPath As String
 pAppPath = Application.UserAppDataPath & "\Errors\errlog.txt"


 If Not System.IO.Directory.Exists(Application.UserAppDataPath & "\Errors\") Then
     System.IO.Directory.CreateDirectory(Application.UserAppDataPath & "\Errors\")
 End If

 'check the file
 Dim fs As FileStream = New FileStream(pAppPath, FileMode.Append, FileAccess.Write, FileShare.Write)
 Dim s As StreamWriter = New StreamWriter(fs)
 s.Close()
 fs.Close()

解決策 4

私の場合、例外を引き起こしたのは AVG アンチウイルスでした。 VS Projects ディレクトリを「許可」リストに追加し、実行可能ファイルを App ディレクトリにコピーした後、.exe を例外リストに追加する必要がありました。

[ad_2]

コメント

タイトルとURLをコピーしました