2016-10-26 2 views
-4

をファイルに書き込めません。サービスは、私がログファイルに書き込むために、次のコードを持っており、それは私のコンソールアプリケーションで正常に動作

try 
{ 
    string log = "some message"; 
    string mFileName = "some directory to the log file"; 
    Console.WriteLine(log); 
    using (StreamWriter w = File.AppendText(mFileName)) 
    { 
     w.WriteLine(log); 
     w.Dispose(); 
    } 
} 
catch (Exception e) 
{ 
    Console.WriteLine("Error Log: " + e.Message); 
} 

しかし、私は自分のPC上のサービスとしてコードを実行し、すべてのロギングを停止します。私はすでにチェックしており、サービスは私と同じ権利を持っています。

注:サービスはクラッシュせず、単にロギングなしで実行されます。

+4

まず 'w.Dispose()'を削除して起動します。これはすでに 'using'の最後で処理されています。 [CA2202:オブジェクトを何度も処理しない](https://msdn.microsoft.com/en-us/library/ms182334.aspx)を参照してください。 – Enfyve

+0

'mFileName'にフルパスが含まれていますか?次の点も考慮する必要があります。[Visual C#を使用してイベントログに書き込む方法](https://support.microsoft.com/en-us/kb/307024) –

+0

'mFileName'は、ファイル名と種類を含む完全なファイルパスです –

答えて

0

これはおそらくユーザー権利と関係している可能性があります。 私の推測では、サービスを開始するシステムユーザーは、ファイルの場所に書き込む権限がありません。

一つの解決策は、自分のアカウントのユーザー資格情報を使用してサービスを開始することである(あなたが権利を持っているので。)

別の解決策は、WEB-用のユーザー(ローカルシステム、サービス利用者やIISのユーザーを与えることですサービス)のディレクトリへの書き込みアクセスを許可するか、またはファイルのパスをユーザーが書き込みアクセス権を持つディレクトリに変更します。

あなたが確かめたいならば、使用のまわりでtry catchブロックを追加し、コンソール、デバッグ、またはメッセージボックスに例外を書き込んでください。それから、あなたは何がうまくいかないのか分かります。

see possible exceptions for File.AppendText on MSDN

私の推測では、それがスローされUnauthorizedAccessException単に、直接StreamWriterを作成するのtry-catchでラップし、例外がある場合は、システムでそれをログに記録しないのはなぜ

+1

"と書いて例外"?ものによって?ロギングの方法がうまくいかない?それはサービスなので、通常の方法でユーザーと対話できません。 – spender

+0

システムイベントログ? [リンク] http://stackoverflow.com/questions/25725151/write-to-windows-application-event-log-without-registering-an-event-source –

0

。 Diagnostics.EventLog?

try 
{ 
    using (Streamwriter sw = new StreamWriter(path, true) 
    { 
     sw.WriteLine(log); 
    } 
} 
catch (Exception ex) 
{ 
    // Log exception using System.Diagnostics.EventLog 
} 
+0

これはどのようにして質問に答えますか? – spender

+0

より明示的なタイピングは理解しやすく、OPが述べるように、彼はすでにそれを取り巻いているが、実際にコードを見ずにエラーをキャッチしてEventLogに記録することはできないだろう。サービスをクラッシュさせ、またいかなるフィードバックもしません。 – Enfyve

関連する問題