سؤال

كيف يمكننا المطالبة بإعادة تشغيل جهاز الكمبيوتر بعد التثبيت من خلال إجراء مخصص C #؟

نحن نستخدم مشروع إعداد VS 2005 لإعدادنا، ونحن بحاجة إلى قرر برمجيا مطالبة إعادة التشغيل (لذلك لن يحدث كل تثبيت، فقط على بعض).

تحديث: نحن نبحث عن شيء بنيت بالفعل في نظام الإجراءات المخصصة MSI أولا. إذا لم يكن ذلك موجودا، فيمكننا اللجوء إلى إعادة تشغيل الكمبيوتر الخاص بنا بطريقة أو بأخرى، ولكن أود تجنب ذلك.

تحديث: نرى أين يمكنك ضبط إعادة التشغيل = القوة عند تحرير MSI في Orca، هل يمكنك تعديل هذه الجداول من إجراء مخصص C # في وقت التشغيل؟ يمكننا ضبط هذا لإعادة التشغيل في كل مرة، ولكن قد يجعل الإعداد المزعج (لن تحتاج إلا إلى إعادة التشغيل في مناسبات نادرة).

تحديث: حاولنا الإعداد:

savedState["REBOOT"] = "Force";

من داخل طريقة التثبيت () إجراءاتنا المخصصة، ولكن لا حظ. لا يبدو مثل التصدي، SaveStstate حقا يفعل أي شيء.

حاول أيضا:

Context.Parameters["REBOOT"] = "Force";

لكنني أعتقد أن هذه المجموعة هي مجرد حجج سطر الأوامر مرت إلى الإجراء المخصص.

تحديث: هل هناك طريقة لتعديل MSI لدينا مع Orca لجعل هذا الخدعة تعمل؟ ربما جدولة إعادة التشغيل على شرط من بعض الملفات الموجودة؟ لم نجد كيفية تعيين خصائص MSI من إجراء مخصص C #.

تحديث: حاولنا التثبيت في AppDomain.ProcessExIT و AppDomain.domainunload وبدء موضوع جديد ومعالجة الاتصال .getCurrentProcess (). waitforexit () ولم يطلق أي من تلك الأحداث من داخل عمل مخصص C # ...

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

المحلول 2

كما يبدو، الطريقة الوحيدة بالنسبة لنا لحل هذا هو إما:

أ) تعديل MSI مع ORCA لجعل إعادة تشغيل الإعداد لكل تثبيت

ب) إعادة مشروع الإعداد مع ويكس أو تثبيت الدرع

شكرا لمساعدة اللاعبين.

نصائح أخرى

تحتاج إلى إضافة أو استدعاء MSI Custom Action Scheduotboot http://msdn.microsoft.com/en-us/library/aa371527(vs.85).aspx. في installexecutesequence الخاص بك،. يمكنك القيام بذلك باستخدام MSIDoaction وظيفة MSIT، http://msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx. داخل عمل مخصص. يرجى ملاحظة أن الإجراء المخصص الذي الجداول هذا يجب أن يكون إجراء مخصص فوري، وليس إجراء مخصص مؤجل. هذا يعني أنك ربما تحتاج إلى جدولة ذلك بعد تثبيتها. يمكنك أيضا إضافته إلى Installexecutesequence بشرط على خاصية عامة تقوم بمجموعات الإجراءات المخصصة الخاصة بك.

عندما اضطررت للقيام بذلك قبل أن استخدمنا وظيفة API Win32 من User32.dll، أعتقد أن هذا كان: ExitWindowSex ()

أعطاك Lancsc الإجابة. تحتاج إلى تشغيل ScheduleReboot، وأفضل طريقة للقيام بذلك هي إدراجها في Installexecutesequence المكيف بواسطة الخاصية المخصصة الخاصة بك التي قمت بتعيينها داخل الإجراء المخصص الخاص بك.

كما ذكر، WIX هو الطريق للذهاب للحصول على المرونة المستقبلية. يشمل WIX الآن أيضا DTF (مؤسسة أدوات النشر) وهي مجموعة غنية من مكتبات فئة .NET التي لفت واجهة برمجة تطبيقات Windows بأكملها. يمكنك استخدام هذا لاستخدام قواعد بيانات MSI بسهولة من C # أو لكتابة الإجراءات المخصصة C #. يمكنني تقديم مزيد من المعلومات حول هذا إذا مرغوب فيه.

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