سؤال

أقوم بإنشاء خدمة 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top