2009-08-28 4 views
1

현재 작업중인 코드는 Windows Server 2003에서 실행되지만 여러 컴퓨터에서 EventLog에 쓸 수 있어야합니다. VS2008 Pro 및 .NET Framework 3.5를 사용하여 C#으로 코딩하고 있습니다. "응용 프로그램"대부분의 경우에 -UAC가 적합합니다!

using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource)) 
{ 
    remoteEvtLog.WriteEntry(Body); 
} 

"LOGNAME은"에 기록 할 로그의 이름이 포함 된 문자열입니다

코드 자체는 (프레임 워크 덕분에) 상대적으로 간단하다. "HostName"은 로그 항목을 작성해야하는 시스템의 NetBIOS 이름을 포함하는 문자열입니다. "EventSource"는 이벤트 보낸 사람의 이름을 포함하는 문자열입니다 (여러 개의 응용 프로그램에서 사용하는 유틸리티이므로 대개 해당 응용 프로그램의 이름이됩니다). "본문"은 이벤트 로그에 기록 할 텍스트가 들어있는 문자열입니다.

대부분의 경우이 방법이 제대로 작동하지만 UAC를 사용하는 컴퓨터를 작성하면 새 EventSource를 만드는 쓰기가 실패합니다. 이는 사용 된 보안 자격 증명이 Administrators 그룹의 구성원인데도 상승 된 권한 수준을 지정하는 방법을 찾을 수는 없지만 발생합니다. 분명히 관리자 goroup의 구성원은 두 개의 토큰을 얻습니다. 하나는 제한적이고 다른 하나는 높게 표시되지만, 내가 알 수있는 한 상승 된 토큰을 지정하는 유일한 방법은 UI를 통한 것입니다. 이는 로그에 원격으로 액세스 할 때 분명히 문제가됩니다.

어떤 아이디어가 있습니까?

답변

0

코드가 새 이벤트 소스를 만들지 않아도됩니다. 기존 자동 작성 동작은 불행하지만 여전히 잘못된 것입니다. 응용 프로그램에 별도의 이벤트 소스가 필요하면 관리자 권한으로 실행되는 해당 응용 프로그램의 설치 관리자가 이벤트 소스를 만들어야합니다.

+0

그리고 어떻게하면 설치 프로그램 (VS 설치 배포 프로젝트의)을 사용하면됩니까? (하이킹에 대해 유감스럽게 생각합니다). – Nate

+0

VS 설치 프로젝트로는이 작업을 수행 할 수 없다고 생각합니다. 그 일은 극히 제한되어 있습니다. 물론 Orcas에서 결과로 나온 MSI를 직접 편집 할 수는 있지만 매우 불편합니다. 일반적으로 실제 프로젝트에서 거의 확실하게 제공되는 설치 프로젝트 이상을 필요로하는 경우 WiX로 전환해야합니다. –

+1

솔루션 탐색기에서 기본 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다. 추가> 새 항목을 선택합니다. 대화 상자에서 Installer 클래스 템플릿을 선택하고 이름을 으로 지정합니다. InitializeCompnent()를 호출 한 후 다음을 추가합니다. ! 코드 : 경우 (EventLog.SourceExists ("MYSOURCE")으로 EventLog.CreateEventSource ("MYSOURCE", "응용 프로그램"); 가 설치 프로젝트를 추가 및 기본 출력을 추가 설치 프로젝트를 마우스 오른쪽 단추로 클릭하고보기를 선택 > CustomActions 설치 폴더를 마우스 오른쪽 단추로 클릭하고 사용자 지정 작업 추가를 선택하십시오. 응용 프로그램 폴더를 선택한 다음 기본 출력 - 확인을 클릭하십시오. 저장 및 빌드 - 추가 한 코드가 설정에서 실행됩니다 – DragonsRightWing

관련 문제