2016-08-16 1 views
0

팀에서 사용하고 있기 때문에,ConfigurationErrorsException- 과정은 'C : eventlog.config'파일을 액세스 할 수 없습니다 다른 프로세스

나는 변함없이 경쟁 조건의 종류에 자체 묶어이 코드 조각이 특히 두 개 이상의 리소스가 eventlog.config 파일에 동시에 쓰려고 할 때 특히 그렇습니다. 몇 가지 채널을 검색 중이지만이 오류를 해결할 수는 없습니다. 누구든지이 코드를 수정하여 경쟁 조건을 제거 할 수 있도록 도와 줄 수 있습니까?

private void UpdateLastEventId(IList<EventLogEntry> entries) 
    { 
     if (entries.Count > 0) 
     { 
      EventLogEntry lastEntry = entries[entries.Count - 1]; 

      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      var configSettings = config.AppSettings.Settings; 

      string key = string.Format(CultureInfo.InvariantCulture, "{0}|{1}", _eventLogFilter.EventLog, _eventLogFilter.MD5Hash); 
      if (configSettings[key] == null) 
      { 
       configSettings.Add(key, lastEntry.Index.ToString(CultureInfo.InvariantCulture)); 
      } 
      else 
      { 
       configSettings[key].Value = lastEntry.Index.ToString(CultureInfo.InvariantCulture); 
      } 
      config.Save(ConfigurationSaveMode.Modified);//Error seems to happen here 
     } 
    } 
+0

이 당신에서 [여기 문서]를 읽을 수 (https://msdn.microsoft.com/en-us/library/ms134088 (V = vs.110)에서 .aspx) – MethodMan

답변

0
private static readonly object _configLogLock = new object(); 
    private void UpdateLastEventId(IList<EventLogEntry> entries) 
    { 
     if (entries.Count > 0) 
     { 
      EventLogEntry lastEntry = entries[entries.Count - 1]; 

      lock (_configLogLock) 
      { 
       Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
       var configSettings = config.AppSettings.Settings; 

       string key = string.Format(CultureInfo.InvariantCulture, "{0}|{1}", _eventLogFilter.EventLog, _eventLogFilter.MD5Hash); 
       if (configSettings[key] == null) 
       { 
        configSettings.Add(key, lastEntry.Index.ToString(CultureInfo.InvariantCulture)); 
       } 
       else 
       { 
        configSettings[key].Value = lastEntry.Index.ToString(CultureInfo.InvariantCulture); 
       } 
       config.Save(ConfigurationSaveMode.Modified);//Error seems to happen here 
      } 
     } 
    } 
+0

뭐하는거야 정보가 .config ..에 저장되면'_configLogLock'을 사용하십시오. 새롭게 생성 된 모든 객체를 처리해야합니다. – MethodMan

+0

답장을 보내 주셔서 대단히 감사합니다. 필자의 유일한 주장은 경쟁 조건을 사용하여이 잠금 문을 테스트하여 구성 파일에 기록하는 방법에 관한 것입니다. 간단히 말해, lock 문을 테스트 할 수 있도록 경쟁 조건을 시뮬레이트하는 방법에 대한 아이디어를 나에게 줄 수 있습니까? –

+0

나는 UpdateLastEventId를 실행하고 그것들을 병렬로 실행하는 수백 개의 스레드를 생성 할 것이다. – serhiyb

관련 문제