2009-10-14 1 views
2

NLog를 사용하려는 Windows 서비스를 만들고 있습니다. 이것은 물론입니다NLog가있는 Windows 서비스

PathToInstalledService\Logs\MyLog.txt 

관리자 priveledges을 필요로하는 것 : 나는 같은 것을 말하는 로그 서비스의 설치 위치에 기록하고자합니다. 그래서 내 질문에, 서비스에 대한 설치를 만들 때 ServiceProcessInstaller에서 어떤 계정을 사용해야합니까? 현재 LocalService를 사용하고 있지만이 계정에는 필요한 고도가 없습니다.

감사합니다.

답변

7

설치 중에 서비스 계정에서 파일을 쓸 수 있도록 'Logs'디렉토리의 사용 권한을 변경해야합니다. 서비스 기능을 수행하는 데 필요한 최소 권한 (일반적으로 NETWORK SERVICE 계정)을 가진 계정을 사용하십시오.

당신은 서비스 상에 설치 클래스에서이 작업을 수행 할 수 있습니다

void Installer1_AfterInstall(object sender, InstallEventArgs e) 
    { 
     string myAssembly = Path.GetFullPath(this.Context.Parameters["assemblypath"]); 
     string logPath = Path.Combine(Path.GetDirectoryName(myAssembly), "Logs"); 
     Directory.CreateDirectory(logPath); 
     ReplacePermissions(logPath, WellKnownSidType.NetworkServiceSid, FileSystemRights.FullControl); 
    } 

    static void ReplacePermissions(string filepath, WellKnownSidType sidType, FileSystemRights allow) 
    { 
     FileSecurity sec = File.GetAccessControl(filepath); 
     SecurityIdentifier sid = new SecurityIdentifier(sidType, null); 
     sec.PurgeAccessRules(sid); //remove existing 
     sec.AddAccessRule(new FileSystemAccessRule(sid, allow, AccessControlType.Allow)); 
     File.SetAccessControl(filepath, sec); 
    } 
+0

이 코드는 ProjectInstaller 클래스의 초기화를 호출해야 하는가? – James

+0

이것에 대한 설치 util 클래스를 만들고 서비스 설치 관리자를 추가하십시오. http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx –

+0

Installer 클래스 내에서 특정 설치 폴더의 경로? – James