2012-02-02 3 views
2

얼마 전에 Windows 서비스 작성 방법에 대한 MSDN 예제를 따랐습니다. 다음 코드가 포함되어 있습니다 :Win7 : 이벤트 소스에서 이벤트 로그 등록 취소

public Monitor_Processes() 
    { 
     InitializeComponent(); 
     if (!System.Diagnostics.EventLog.SourceExists("Monitor_Processes")) 
     { 
      System.Diagnostics.EventLog.CreateEventSource("Monitor_Processes", "Monitor_Processes_Log"); 
     } 
     eventLog1.Source = "Monitor_Processes"; 
     eventLog1.Log = "Monitor_Processes_Log"; 
    } 

괜찮 았지만 서비스를 시작하는 중 오류가 발생했습니다. "이벤트 로그에"Monitor_Processes "소스가 'Monitor_Processes_Log'로그에 등록되지 않았습니다. (로그 '응용 프로그램'에 등록되었습니다.)"

이후 코드를 다음과 같이 변경했습니다 :

public Monitor_Processes() 
    { 
     InitializeComponent(); 
     if (!System.Diagnostics.EventLog.SourceExists("Monitor_Processes")) 
     { 
      System.Diagnostics.EventLog.CreateEventSource("Monitor_Processes", ""); 
     } 
     eventLog1.Source = "Monitor_Processes"; 
    } 

그러나

(오류 메시지가 계속 "Monitor_Processes_Log"를 참조한다) 서비스를 시작하려고 할 때 지금, 나는 여전히 같은 오류를 얻을 - 심지어 제거하고 다시 부팅 한 후입니다.

어떻게 새로 시작하고 내 소스가 응용 프로그램 로그에 등록되어 있습니까? (서비스가 성공적으로 시작되었다고 가정 할 때)? 당신은 소스를 삭제해야

답변

1

, 보조 노트로

System.Diagnostics.EventLog.DeleteEventSource("Monitor_Processes"); 

, 나는 소스가 존재하는지 확인하고 서비스의 실행 중에를 만들려고 할 수 없습니다 권합니다. EventLog.SourceExists() 메서드는 보안 로그를 확인하려고하기 때문에 Windows 7 및 Windows Server 2008 R2에서 관리 권한이 필요합니다. ServiceInstaller 클래스에 이러한 검사/작성 명령문을 추가해야합니다.

Windows 서비스를 만들지 않으려면 로컬 관리자가 필요합니다.

편집 : 수동으로 이벤트 로그 원본을 만들려면 PowerShell도 사용할 수 있습니다.

param (
    $logName = "Application", 
    $source = $(Read-Host -prompt "Enter EventLog source"), 
    $machineName = ".", 
    [switch]$verbose 
) 

function createEventSource() { 
    if (![System.Diagnostics.EventLog]::SourceExists($source, $machineName)) { 
     [System.Diagnostics.EventLog]::CreateEventSource($source, $logName, $machineName) 
     Write-VerboseHost "Created source $source in log $logName." 
    } else { 
     Write-VerboseHost "Source $source in log $logName already exists." 
    } 
} 

function help() { 
    "Usage: Create-EventSource -source string [-machineName string] [-verbose]" 
    exit 
} 

function Write-VerboseHost($message) { 
    if ($verbose) { 
     Write-Host $message 
    } 
} 

if (!$source) { help } 
+0

관리자 권한에 대한 훌륭한 조언. –

+0

감사합니다. Phil. 이벤트 소스를 삭제하고 독립 실행 형 프로그램에서 새로 만들었습니다. 그러나 서비스를 다시 설치 한 후에도 시작하려고 할 때 동일한 오류가 발생합니다. 내 설치가 새 코드를 무시하는 것과 같습니다. Visual Studio에서 설치를하고 있습니다 (솔루션을 다시 빌드 한 후). –

+0

수표도 제거했는지 확인하십시오. 쓰기 및 이벤트의 경우 정적 메서드를 사용하기 만하면됩니다. EventLog.WriteEntry ("Monitor_Processes", "Write some message"); 여전히 문제가 발생하면 try/catch에서 코드를 래핑 할 수 있습니다. catch 핸들러에서 Debug/Trace를 사용하여 명령문을 출력하십시오. 그런 다음 DebugView를 사용하여 현재 진행중인 작업을 확인할 수 있습니다. –