تمرير إعادة التثبيت إلى ملف MSI
-
20-09-2019 - |
سؤال
أنا أستخدم VisualStudio2005 و VDProj لإنشاء ملف MSI بسيط. أحتاج إلى تمرير خاصية إعادة التثبيت عند تشغيلها.
أعلم أن هذا يمكن القيام به عبر سطر الأوامر ، مثل ذلك:msiexec.exe /i foo.msi REINSTALLMODE=amus
ومع ذلك ، إذا اختار المستخدم النقر فوق MSI مباشرة (تشغيل المعالج) ، فلا يتم تمرير العقار. هل من الممكن القيام بذلك عبر VS و VDProj؟
بعض الخيارات التي بحثت عنها:
- عندما أقوم بإنشاء MSI عبر VS ، فإنه ينتج أيضًا إعدادًا. هل هناك طريقة لتمرير خاصية إعادة التثبيت من خلال هذا ربما؟
- لقد قمت بتثبيت ORCA ، والذي يسمح لي بعرض/تحرير جدول خاصية MSI. يمكنني إضافتها بهذه الطريقة ، لكن بعد ذلك يجب أن أضيفها في كل مرة أقوم فيها بإنشاء MSI.
شكرا على أي نصيحة.
المحلول
للأسف ، لا يمكنني إيجاد طريقة لتعيين خصائص MSI الأخرى في Vstudio.
ومع ذلك ، فإن إحدى الطرق التي يجب أن تعمل هي:
- استخدم ORCA لإنشاء تحويل (MST) الذي يغير فقط خاصية إعادة التثبيت. (باختصار ، تقوم بتحرير الخاصية وتحفظه كتحويل جديد ، ثم استخدم الأمر "إنشاء تحويل" لإنشاء MST.)
- يمكن تطبيق هذا التحويل مباشرة على MSI باستخدام msitran.exe الأمر (متوفر في نفس برنامج Windows Installer SDK حيث وجدت ORCA).
- يمكنك إما: (أ) إيجاد طريقة لتشغيل Visual Studio دائمًا على قيام MSITRAN الخاص بك مباشرة بعد بناء MSI ، أو (ب) فقط قم بتشغيل MSITRAN يدويًا (من ملف دفعي أو مثل) بعد البناء ولكن قبل الاختبار.
نصائح أخرى
لقد وجدت طريقة أكثر تلقائية للقيام بذلك.
قم بإنشاء برنامج نصي مسمى add_reinstall_prop.vbs(مثال) مع العازل:
set objArgs = WScript.Arguments
set o_installer = CreateObject("WindowsInstaller.Installer")
set o_database = o_Installer.OpenDatabase(objArgs(0), 1)
s_SQL = "INSERT INTO Property (Property, Value) Values( 'REINSTALLMODE', 'amus')"
set o_MSIView = o_DataBase.OpenView( s_SQL)
o_MSIView.Execute
o_DataBase.Commit
أضف حدثًا بعد البناء إلى مشروع الإعداد الخاص بك يدعو البرنامج النصي بما يلي:
add_reinstall_prop.vbs $(BuiltOuputPath)
سيؤدي هذا تلقائيًا إلى إضافة الإدخال المطلوب إلى MSI المصنوع. يمكنك بعد ذلك التحقق من ذلك مع ORCA لمعرفة الإدخال تلقائيًا الآن بعد الإنشاء.