خدمة Windows مع NLOG
-
21-09-2019 - |
سؤال
أقوم بإنشاء خدمة Windows التي أريد استخدام NLOG معها. أريد أن تتم كتابة السجلات إلى موقع التثبيت للخدمة يقول شيئًا مثل:
PathToInstalledService\Logs\MyLog.txt
هذا بالطبع سيتطلب خصوصيات المسؤول. لذا فإن سؤالي هو ، عند إنشاء التثبيت للخدمة ، ما هو الحساب الذي يجب أن أستخدمه في ServiceProcessInstaller. لقد كنت أستخدم FacalService حاليًا ، لكن هذا الحساب ليس لديه الارتفاع المطلوب.
شكرًا.
المحلول
أثناء التثبيت ، يجب عليك تغيير أذونات دليل "سجلات" للسماح بحساب الخدمة بكتابة الملفات. استخدم الحساب بأقل امتيازات مطلوبة لأداء وظيفة الخدمات الخاصة بك ، وعمومًا حساب خدمة الشبكة.
يمكنك القيام بذلك من فئة تثبيت على الخدمة:
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);
}
لا تنتمي إلى StackOverflow