سؤال

أحاول الحفاظ على مشروع الإعداد في Visual Studio 2003 (نعم، إنه تطبيق قديم).المشكلة التي نواجهها حاليًا هي أننا بحاجة إلى كتابة إدخالات التسجيل HKCU لكل مستخدم على جهاز الكمبيوتر.يجب أن يكونوا في HKCU بدلا من HKLM لأنها إعدادات المستخدم الافتراضية، وتتغير لكل مستخدم.شعوري هو ذلك

  1. هذا غير ممكن
  2. هذا ليس شيئًا يجب أن يفعله المثبت، ولكنه شيء يجب أن يفعله التطبيق (بعد كل ما يحدث عندما يتم إنشاء ملف تعريف المستخدم بعد التثبيت؟).

مع أخذ ذلك في الاعتبار، ما زلت أرغب في إجراء أقل قدر ممكن من التغييرات في التطبيق، لذا سؤالي هو، هل من الممكن إضافة إدخالات التسجيل لكل مستخدم في ملف Visual Studio 2003 مشروع الإعداد؟

وفي الوقت الحالي، يسرد المشروع خمسة مفاتيح جذر للتسجيل (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, ، وخلية المستخدم/الجهاز).لا أعرف حقًا أي شيء عن مفتاح جذر المستخدمين، ولم أر خلية المستخدم/الجهاز.هل يمكن لأحد أن ينيرني على ما هم؟ربما يمكنهم حل مشكلتي أعلاه.

هل كانت مفيدة؟

المحلول

أولاً:نعم، هذا شيء ينتمي إلى التطبيق للهدف المحدد الذي حددته:ماذا يحدث بعد إنشاء ملفات تعريف المستخدمين الجديدة؟بالتأكيد، إذا كنت تستخدم نطاقًا، فمن الممكن أن يتم وضع بعض الأشياء في السجل عند إنشائه، ولكن هذه ليست حالة استخدام حقًا.يجب أن يتحقق التطبيق مما إذا كانت هناك إعدادات ويستخدم الإعدادات الافتراضية إذا لم يكن الأمر كذلك.

ومع ذلك، فمن الممكن تغيير مفاتيح المستخدمين الآخرين من خلال خلية HKEY_USERS.

ليس لدي أي خبرة في مشروع إعداد Visual Studio 2003، لذا إليك جزء من كود VBScript (غير ذي صلة على الإطلاق) والذي قد يمنحك فكرة عن المكان الذي تبحث فيه:

const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next

(الرمز من باب المجاملة جيروين ريتماير)

نصائح أخرى

أعتقد أنه لأنك تريد تعيينه لجميع المستخدمين، فأنت على نوع من أجهزة الكمبيوتر المشتركة، والذي ربما يعمل ضمن مجال؟

هنا يكون التنين

لنفترض أن جو وجين يقومان بتسجيل الدخول بانتظام إلى جهاز الكمبيوتر، ومن ثم سيكون لدى كل منهما "سجلات".

ستقوم بعد ذلك بتثبيت تطبيقك، وسيستخدم المثبت عمليات اختراق عملاقة وأشياء مثيرة للاشمئزاز لتعيين العناصر ضمن HKCU لهم.

بعد ذلك، سيأتي بوب ويسجل الدخول (هو و500 شخص آخر لديهم حسابات في المجال وبالتالي يمكنهم القيام بذلك).لم يستخدم هذا الكمبيوتر من قبل، لذلك ليس لديه سجل.في المرة الأولى التي يقوم فيها بتسجيل الدخول، يقوم Windows بإنشاء حساب له، ولكن لن يكون لديه الإعداد الخاص بك.

ثم يسقط تطبيقك أو يتصرف بشكل غير صحيح، ويشكو بوب بصوت عالٍ من تلك المنتجات السيئة من شركة raynixon المدمجة.

الإجابة الصحيحة هي أن يكون لديك فقط بعض الإعدادات الافتراضية في تطبيقك، والتي يمكنها كتابتها في السجل إذا لم يعثر عليها.من الممارسات الجيدة العامة ألا يعتمد تطبيقك أبدًا على السجل، ويجب أن ينشئ أشياء حسب الحاجة، لأي إدخال سجل، وليس فقط HKCU، على أي حال

وعلى الرغم مما مقالة MSDN أرشيف مقالة MSDN يقول عن خلية المستخدم/الجهاز، فإنه لا يكتب إلى HKEY_USERS.بل يكتب إلى HKCU إذا قمت بتحديد Just Me وHKLM إذا قمت بتحديد الجميع.

لذلك سيكون الحل الخاص بي هو استخدام User/Machine Hive، ثم في التطبيق يتحقق مما إذا كانت إدخالات التسجيل موجودة في HKCU وإذا لم تكن كذلك، قم بنسخها من HKLM.أعلم أن هذه ربما ليست الطريقة المثالية للقيام بذلك، ولكنها تحتوي على أقل قدر من التغييرات.

أنا في منتصف الطريق إلى الحل الخاص بي مع هذا الإدخال على MSDN (لا أعرف كيف لم أتمكن من العثور عليه من قبل).

خلية المستخدم/الجهاز
سيتم تثبيت المفاتيح الفرعية والقيم التي تم إدخالها ضمن هذه الخلية ضمن خلية HKEY_CURRENT_USER عندما يختار المستخدم "أنا فقط" أو خلية HKEY_USERS أو عندما يختار المستخدم "الجميع" أثناء التثبيت.

محرر التسجيل أرشيف مقالة MSDN

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