سؤال

أنا أستخدم VisualStudio2005 و VDProj لإنشاء ملف MSI بسيط. أحتاج إلى تمرير خاصية إعادة التثبيت عند تشغيلها.

أعلم أن هذا يمكن القيام به عبر سطر الأوامر ، مثل ذلك:msiexec.exe /i foo.msi REINSTALLMODE=amus

ومع ذلك ، إذا اختار المستخدم النقر فوق MSI مباشرة (تشغيل المعالج) ، فلا يتم تمرير العقار. هل من الممكن القيام بذلك عبر VS و VDProj؟

بعض الخيارات التي بحثت عنها:

  • عندما أقوم بإنشاء MSI عبر VS ، فإنه ينتج أيضًا إعدادًا. هل هناك طريقة لتمرير خاصية إعادة التثبيت من خلال هذا ربما؟
  • لقد قمت بتثبيت ORCA ، والذي يسمح لي بعرض/تحرير جدول خاصية MSI. يمكنني إضافتها بهذه الطريقة ، لكن بعد ذلك يجب أن أضيفها في كل مرة أقوم فيها بإنشاء MSI.

شكرا على أي نصيحة.

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

المحلول

للأسف ، لا يمكنني إيجاد طريقة لتعيين خصائص MSI الأخرى في Vstudio.

ومع ذلك ، فإن إحدى الطرق التي يجب أن تعمل هي:

  1. استخدم ORCA لإنشاء تحويل (MST) الذي يغير فقط خاصية إعادة التثبيت. (باختصار ، تقوم بتحرير الخاصية وتحفظه كتحويل جديد ، ثم استخدم الأمر "إنشاء تحويل" لإنشاء MST.)
  2. يمكن تطبيق هذا التحويل مباشرة على MSI باستخدام msitran.exe الأمر (متوفر في نفس برنامج Windows Installer SDK حيث وجدت ORCA).
  3. يمكنك إما: (أ) إيجاد طريقة لتشغيل 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 لمعرفة الإدخال تلقائيًا الآن بعد الإنشاء.

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