C# خدمة Windows يحتاج إلى إجراء التغييرات على التسجيل

StackOverflow https://stackoverflow.com/questions/1632280

  •  06-07-2019
  •  | 
  •  

سؤال

لدي خدمة التي تحتاج إلى تحديث التسجيل كل 5 دقائق (مواجهة gpo).الكود يعمل بشكل جيد في تطبيق العادية ، ولكن عندما وضعه في خدمة windows لا تجعل التغييرات.أنا باستخدام حساب النظام المحلي لهذه الخدمة وليس رمي أي استثناءات

رمز أدناه يعمل في التحكم العادية التطبيق ولكن ليس في الخدمة:

RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
        if (key != null)
        {
            key.SetValue("ScreenSaverIsSecure", "0", RegistryValueKind.String);
            key.SetValue("ScreenSaveActive", "0", RegistryValueKind.String);
            key.SetValue("ScreenSaveTimeOut", "0", RegistryValueKind.String);
            key.SetValue("SCRNSAVE.EXE", "", RegistryValueKind.String);
        }


        key = Registry.CurrentUser.OpenSubKey(@"Software\Policies\Microsoft\Windows\Control Panel\Desktop", true);
        if (key != null)
        {
            key.SetValue("ScreenSaverIsSecure", "0", RegistryValueKind.String);
            key.SetValue("ScreenSaveActive", "0", RegistryValueKind.String);
            key.SetValue("ScreenSaveTimeOut", "0", RegistryValueKind.String);
            key.SetValue("SCRNSAVE.EXE", "", RegistryValueKind.String);
        }
        System.Diagnostics.Process.Start(@"c:\windows\System32\RUNDLL32.EXE", "user32.dll, UpdatePerUserSystemParameters");

أي أفكار ؟

تحرير:

شكرا على الردود.أنا لا أعرف لماذا "CurrentUser" هرب انتباهي.شكرا لشرحك هذا.

مشكلتي لا يزال هذا الفريق السياسة هي التي دفعت ضد currentuser.الآن أنا أفكر في مجرد إنشاء التطبيق الذي يقوم بتحميل عند بدء التشغيل و تبقى نشطة.أي اقتراحات أخرى سيكون موضع ترحيب.

تحرير:

كما سيتم تعليق, أنا غير قادر على العثور على UpdatePerUserSystemParameters وظيفة التوقيع في win32 api.هل هذا يعني أنه يمكن أن يطلق عليه دون المعلمات ؟

   [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern bool UpdatePerUserSystemParameters();
هل كانت مفيدة؟

المحلول

انظر هذه الصفحة:

الخدمة التي يتم تشغيلها في سياق حساب النظام المحلي يرث الأمن سياق SCM...وهذا له عدة آثار:

مفتاح التسجيل HKEY_CURRENT_USER يرتبط مع المستخدم الافتراضي وليس المستخدم الحالي.للوصول إلى مستخدم آخر الشخصي انتحال شخصية المستخدم ، ثم الوصول إلى HKEY_CURRENT_USER.

نصائح أخرى

ما (الذي) هل تتوقع Currentuser أن يكون داخل الخدمة ؟

التسجيل هو دائما متعة ، ولكن لا يعني ذلك انك تحرير المستخدم إعدادات التسجيل من "النظام المحلي" المستخدم ؟ حتى إذا الفعلية يتم تسجيل المستخدم في "النظام المحلي" (الذي أشك) ، فإنها لن ترى أي شيء...

وأظن تحتاج إلى تحرير آلة واسعة من الإعدادات ، أو نشط المستخدم(s).

تشغيل الخدمة تحت حساب آخر في تسجيل الدخول.

حساب "النظام المحلي" ليس مستخدم, وبالتالي لا يوجد أي سجل.CurrentUser الرئيسية (لا تسجيل الدخول = لا الحالي المستخدم = رقم المستخدم الحالي الرئيسية.

إذا كان يعمل خارج الخدمة ، قد يكون مشكلة أذونات.يمكنك الحصول على استثناء عند محاولة استخدام المفتاح.SetValue()?هو خدمة قيد التشغيل ضمن حساب لديه حق الوصول للكتابة إلى التسجيل ؟

محاولة وضع التسجيل التلاعب في محاولة اللحاق كتلة ؛ خدمات تشغيل في الثانوية المواضيع التي تأكل استثناءات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top