DOBON.NET DOBON.NETプログラミング掲示板過去ログ

エラーログをexeと同じフォルダに配置する

環境/言語:[vb2008]
分類:[.NET]

exeを配置した場所(C:\Program Files\hoge\hogehogesys) と同じ場所にエラー ログフォルダを配置したいとおもいます。

以下のように作ってみました。
Visual Stadioからのデバッグだとうまくログを出してくれるのですが、
実際にsetup.exeからインストールしたものを動かすとうまくいきません。
どうやら以下の

System.IO.Directory.CreateDirectory(logFolder)

でエラーになっているようなのですが、どのように修正を行えばよいのかわかり ません。お知恵をお貸しくださいよろしくお願いいたします。


Public Sub CommonError(ByVal errorMessage As Exception, ByVal strErrorGamen As String)

Try

Dim dtnow As Date = Now '発生日時
Dim UserName As String 'ユーザーID


※※ Dim logFolder As String = Application.ExecutablePath & "Log"
     パスが影響
MsgBox(logFolder & "作成成功")

' ログフォルダ作成
System.IO.Directory.CreateDirectory(logFolder) ←ここでエラーになっている


' ログファイル名作成
Dim logFile As String = logFolder & "\ErrorLog" & dtnow.ToString("yyyyMMdd") & ".log"


UserName = UserIDp

' ログ出力文字列作成
Dim logStr As String
logStr = dtnow.ToString("yyyy/MM/dd HH:mm:ss") & vbTab & UserName & vbTab & strErrorGamen
If errorMessage Is Nothing = False Then
logStr = logStr & vbCrLf & errorMessage.ToString & vbCrLf
End If

MsgBox(logStr & "作成成功")

' Shift-JISでログ出力
Dim sw As IO.StreamWriter = Nothing

Try
sw = New IO.StreamWriter(logFile, True, System.Text.Encoding.GetEncoding("Shift-JIS"))
sw.WriteLine(logStr)
MsgBox("書き込み成功")

Catch ex2 As Exception
Finally
If sw Is Nothing = False Then sw.Close()
End Try



Catch ex As Exception
MessageBox.Show("プログラムエラーが発生しました", "エラー処 理内エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
2013/05/21(Tue) 16:53:31 編集(投稿者)

C:\Program Files配下は、管理者権限での実行でないと書き込みできません。
(対象OSが何かの記載がありませんが、例えば、Setup.exeでC:\Program Files配下へのインストールを指定した場合、
UACの画面で管理者権限を確認しないとインストールできないことからもうかがうことができます。)
平たく言えば、C:\Program Files配下は、勝手にフォルダやファイルを作成してはいけない場所なので、
ログファイルは他のところに作成するようにしましょう。

なお、エラーが発生した場合、どのようなエラーが発生したかも書きましょう。
すでに指摘のある通り、Windows Vista 以降では Program Files 以下への書き込みは管理者として実行しない限りできません。
また、通常のプログラムでは、Program Files 以下に書き込むのではなく、ユーザーアカウントごとのフォルダーに書き込むことが望ましいとされています。

まずは、本当に Program Files に書き込まなければならないかを見直してください。
そこである必要がないのであれば、ApplicationData(AppData) など、ユーザーごとのフォルダーを検討してください。

どうしても、そのマシンの全ユーザーの共通フォルダーに書き込む必要があるのであれば、インストーラーを工夫するなど、手間がかかる点を認識して取り組んでください。
Azuleanさん,とくむぁさん
回答ありがとうございました!

理由が分かりすっきりしました。
ファイルを出力する場所を変更して対応したいと思います。
解決済み忘れてました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板