2

したがって、基本的には、任意のディレクトリで zip ファイルをスキャンし、それを FTP サーバーにアップロードする Windows サービスを作成します。txt ファイルに書き込み、すべてのログを保持することを想定したトレース メソッドを追加しました。サービスを Windows にリリースすると、問題が発生します。イベント ビューアにエラー メッセージが表示されます (EventLog クラスを使用して LogEvent を追加しました)。

System.IO.IOException: 別のプロセスで使用されているため、プロセスはファイル 'C:\Windows\system32\traceLog.txt' にアクセスできません。

トレースを行うコードは次のとおりです

private void EscribirTrace(string mensaje)
    {
        if (Tracing)
        {
           try
            {
              using (FileStream archivo2 = new FileStream(string.Format("{0}\\traceLog.txt", Environment.CurrentDirectory), FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    mensaje = string.Format("{0} - {1} \r\n", DateTime.Now, mensaje);

                    StreamWriter writer = new StreamWriter(archivo2);
                    writer.WriteLine(mensaje);
                    writer.Flush();
                    writer.Dispose();
                }
            }
            catch (Exception ex)
            {
                LogEvent("Error en escribir tracing", ex);
            }
        }

    }

任意のアイデアをいただければ幸いです

編集そのため、いくつかの調査の結果、そのsystem32はファイルに最適な場所ではないことがわかりました。私の意図は、サービスがインストールされたパスにそのログ ファイルを配置することでした。いくつかの調査の後、私は

Enviroment.CurrentDirectory

為に

Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().Location).Replace(
                Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)

文字列にフォーマットされます。

残りはかなりうまくいきました。

回答ありがとうございます。

4

3 に答える 3

0

これは、using ステートメントがまだファイルを解放していないためです。ストリームで開いているので、ストリームを閉じるまで書き込みできません。

単純にテキストをファイルに書き込みたい場合は、次を使用します。

File.WriteAllText(FILEPATH, TEXTDATA);

その呼び出しは、ファイルを開き、書き込み、そして閉じます。

于 2012-12-13T18:57:47.760 に答える
0

using がスローされた場合 ...ファイル上の他のすべてのストリームが適切に閉じられていることを確認してください ...

ストリームライターコンストラクターでスローする場合

コンストラクターで新しいファイルストリームを使用して、使用をストリームライターに変更します

于 2012-12-13T18:59:35.833 に答える
0

/Windows/system32 には管理者アクセスが必要です。アプリケーションが適切な権限で実行されていない可能性があります。ログを別の (より制限の少ない) 場所に書き込んでみてください。system32 に書き込む必要がある場合は、サービスが管理者権限で実行されていることを確認してください。

于 2012-12-13T19:00:26.193 に答える