سؤال

لدينا تطبيق مكتوب في كل من C ++ و .NET يتم تثبيته لجميع المستخدمين في مجلد ملفات البرنامج. يقوم هذا التطبيق بتنزيل إصدارات جديدة من نفسه (كمثبتات MSI) وينتج عن عملية التثبيت الجديدة لاستبدال نفسها.

عملية التثبيت كما هي اليوم:

  1. انسخ تطبيق تثبيت Manager (C#، .NET 2.0) إلى دليل Temp. اتصل بهذا "المدير"
  2. يتم تنفيذ المدير مع خصوصية مرتفعة حسب هذا المقال.
  3. يخرج التطبيق الأصلي.
  4. يولد المدير مثبت MSI (مع خصوصية مرتفعة ، لأن النسخة مرتفعة)
  5. يولد المدير الإصدار الجديد من التطبيق.

الحشرة:

يعمل التطبيق المثبت حديثًا في حالة مرتفعة. هذا يسبب مشاكل لن أعددها هنا.

من الناحية المثالية ، سيتم تشغيل تطبيق التطبيق المثبت حديثًا مع أذونات المستخدم الأصلي.

لا يمكنني معرفة كيفية تخفيض تطبيق التطبيق إلى أن يكون المستخدم القياسي بعد الارتفاع.

اختراق inelegant:

(نعم ، نعم ، هذه العملية برمتها غير محتملة على أي حال)

  1. انسخ مدير التثبيت إلى دليل temp
  2. قم بتشغيل مدير التثبيت مع خصوصية المستخدم القياسية. دعنا نسمي هذه الحالة "Lowlymanager".
  3. يخرج التطبيق الأصلي.
  4. يولد Lowlymanager التطبيق تكرارا, ، هذه المرة مع خصوصية مرتفعة. دعنا نسمي هذا المثيل "UpperManagement"
  5. يولد UpperManagement المثبت
  6. يخرج UpperManagement بأمان ، وإعادة رمز الخروج للمثبت.
  7. يفسر Lowlymanager رمز الخطأ من UpperManagement ، ويولد التطبيق المثبت حديثًا. هذه المرة كما invoker الأصلي.

هل هناك طريقة أفضل للقيام بذلك؟

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

متطلبات اخرى:

  • لا يمكننا التثبيت كتطبيق لكل مستخدم
  • لا ينبغي تقديم المستخدم مع مربع حوار مصادقة إذا كان UAC قد سأل ببساطة "هل أنت متأكد أنك تريد السماح بذلك؟". أعتقد أن هذا قد يقتل حلًا باستخدام WindowsImpsonationContext ، لكنني لست متأكدًا.
  • يحتاج النظام إلى العمل على XP و Vista و Windows 7 (حتى لو كانت هناك عملية منفصلة لـ XP).
هل كانت مفيدة؟

المحلول

اتجاه واحد: http://www.codeproject.com/kb/vista-security/vistaelevator.aspx

طريقة أخرى (المذكورة في أحدث التعليق في المقالة السابقة): http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-bart-2-how/

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