2
我正在創建一個Windows服務,我想使用NLog。我希望將日誌寫入服務的安裝位置,例如:Windows服務與NLog
PathToInstalledService\Logs\MyLog.txt
這當然需要管理員密碼。所以我的問題是,在爲服務創建安裝時,我應該在ServiceProcessInstaller上使用哪個帳戶。我一直在使用LocalService,但該帳戶沒有所需的高程。
謝謝。
我正在創建一個Windows服務,我想使用NLog。我希望將日誌寫入服務的安裝位置,例如:Windows服務與NLog
PathToInstalledService\Logs\MyLog.txt
這當然需要管理員密碼。所以我的問題是,在爲服務創建安裝時,我應該在ServiceProcessInstaller上使用哪個帳戶。我一直在使用LocalService,但該帳戶沒有所需的高程。
謝謝。
在安裝期間,您應該更改「日誌」目錄的權限以允許您的服務帳戶寫入文件。使用執行服務功能所需的權限最小的帳戶,通常是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);
}
如果這種代碼在ProjectInstaller類的初始化叫什麼? – James 2009-10-14 17:00:06
我會爲此創建一個安裝util類並將服務安裝程序添加到它:http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx – 2009-10-14 17:48:09
任何想法如何我可以得到安裝程序類中的特定安裝文件夾的路徑? – James 2009-10-14 20:56:56