2012-12-13 3 views
2

기본적으로 특정 디렉토리에서 zip 파일을 검색 한 다음 FTP 서버에 업로드하는 Windows 서비스를 작성합니다. txt 파일에 쓰고 모든 로그를 유지하는 추적 방법을 추가했습니다. 프로세스가 파일 '를 액세스 할 수 없습니다 문제는 내가 창문으로 서비스를 놓을 때 나는 이벤트 뷰어에서 오류 메시지 (나는은 EventLog 클래스를 사용하여 LOGEVENT 추가)FileStream 및 StreamWriter를 사용하여 LogFile을 쓰려고하는 예외

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를가에 가장 적합한 장소가 아니다는 것을 알 파일. 내 의도는 서비스가 설치된 경로에 해당 로그 파일을 저장하는 것이 었습니다. 몇 가지 조사 후 나는 문자열로 포맷 된

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

Enviroment.CurrentDirectory 

를 교체했다.

나머지는 꽤 잘 작동했습니다.

감사합니다.

+0

프로그램에 system32에 쓸 수있는 권한이 있습니까? 예를 들어 데스크탑에 작성하면 어떻게됩니까? – Ragnagord

답변

0

귀하의 성명서가 아직 파일을 공개하지 않아서입니다. 스팀을 열어서 스트림을 닫을 때까지 쓸 수 없습니다. 당신은 단순히 파일에 텍스트를 작성하려면

은 사용

File.WriteAllText(FILEPATH, TEXTDATA); 

호출, 파일을 엽니 다 쓸하고 닫 것이다.

0

는 사용하여 발생하는 경우 ... 파일의 다른 모든 스트림이 제대로 닫혀 있는지 확인 ...

는 스트림 작가가 사용하는 StreamWriter를 생성자

변화가 발생하는 경우 생성자에 새 파일 스트림이있는 경우

0

/Windows/system32에 관리자 액세스가 필요합니다. 응용 프로그램이 적절한 권한으로 실행되고 있지 않습니다. 로그를 다른 (덜 제한적인) 위치에 작성해야합니다. system32에 써야 할 경우 관리자 권한으로 서비스가 실행되고 있는지 확인하십시오.

관련 문제