2009-10-14 119 views
2

我正在創建一個Windows服務,我想使用NLog。我希望將日誌寫入服務的安裝位置,例如:Windows服務與NLog

PathToInstalledService\Logs\MyLog.txt 

這當然需要管理員密碼。所以我的問題是,在爲服務創建安裝時,我應該在ServiceProcessInstaller上使用哪個帳戶。我一直在使用LocalService,但該帳戶沒有所需的高程。

謝謝。

回答

7

在安裝期間,您應該更改「日誌」目錄的權限以允許您的服務帳戶寫入文件。使用執行服務功能所需的權限最小的帳戶,通常是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 2009-10-14 17:00:06

+0

我會爲此創建一個安裝util類並將服務安裝程序添加到它:http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx – 2009-10-14 17:48:09

+0

任何想法如何我可以得到安裝程序類中的特定安裝文件夾的路徑? – James 2009-10-14 20:56:56