سؤال

لديّ مشروع إعداد لتطبيق .NET الخاص بي ، وكلاهما يعمل بشكل جيد ، إذا تركوا وحدهم أثناء عملهما.

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

أود فقط تبسيط الموقف ؛ أرغب في إزالة قدرة المستخدم على إلغاء إلغاء التثبيت قيد التقدم. هل يمكن هذا؟

شكرا ، بين

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

المحلول

نعم ، من الممكن القيام بذلك. قوائم MSDN العديد من الخيارات; ؛ ومع ذلك ، قد يكون من الأسهل فقط تصحيح ملف MSI الذي تم إنشاؤه بواسطة Visual Studio. يمكن القيام بذلك باستخدام ORCA (ستجد تثبيتًا لهذه الأداة في مجلد Windows SDK عادةً ضمن ملفات C: Program Microsoft SDKS Windows V6.0a bin orca.msi).

يتيح لك ORCA تحرير جداول قاعدة بيانات MSI. لإخفاء زر الإلغاء ، يجب عليك إضافة سجل إلى جدول ControlCondition (من هنا):

Dialog        | Control      | Action   | Condition
------------------------------------------------------
ProgressForm  | CancelButton | Hide     | 1

هذه المهمة اليدوية المتمثلة في إضافة سجل باستخدام ORCA من المحتمل أن يتم ذلك بشكل أفضل مع VBScript قصيرة مثل ذلك:

Set oMsi = CreateObject("WindowsInstaller.Installer")

' get path to msi from command line
strMsiFullPath = Wscript.Arguments(0)
' open transacted
Set oDB = oMsi.OpenDatabase(strMsiFullPath , 1)

' insert a record into the [ControlCondition][3] table
Set oView = oDB.OpenView("INSERT INTO `ControlCondition` " & _
    "(`ControlCondition`.`Dialog_`, `ControlCondition`.`Control_`," & _
     "`ControlCondition`.`Action`, `ControlCondition`.`Condition`) " & _
     "VALUES ('ProgressForm', 'CancelButton', 'Hide', '1')")

' clean up
oView.Execute: oView.Close: oDB.Commit
Set oMsi = Nothing

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

cscript $(ProjectDir)patch.vbs $(BuiltOuputPath)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top