كيف يمكنني تحديث / إضافة خاصية داخل MSI من سطر الأوامر؟
-
05-07-2019 - |
سؤال
ولدي المثبت MSI التي أنا بحاجة لإضافة أو تعديل خاصية نصية قصيرة من سطر الأوامر.
وهذا ما ينبغي القيام به بعد بناء المثبت. أنا لا يمكن تعديل العملية التي تنتج المثبت في المقام الأول. كما أن لديها ليتم تنفيذها مقطوعة الرأس من السيناريو.
وعندما أقول "الملكية"، فإنه يمكن أن يكون خاصية MSI، وهي القيمة التي يحصل كتابة إلى بالسجل في تثبيت الوقت، أو أي آلية أخرى يمكن الحصول على هذا نص مخصص قصيرة إلى التطبيق المثبت عند تشغيله.
المحلول
مثال VBScript التي يمكنك استخدامها لتحديث (أو إضافة) خاصية ما بعد بناء ...
Option Explicit
Const MSI_FILE = "myfile.msi"
Dim installer, database, view
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (MSI_FILE, 1)
' Update
Set view = database.OpenView ("UPDATE Property SET Value = '" & myproperty & "' WHERE Property = 'MYPROPERTY'")
' .. or Add (Insert)
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & myproperty & "')")
view.Execute
Set database = Nothing
Set installer = Nothing
Set view = Nothing
لمزيد من المعلومات راجع SDK لبرنامج Windows Installer (جزء من في ويندوز SDK )، وهناك مجموعة من سبيل المثال البرامج النصية التي يمكنك استخدامها من سطر الأوامر للقيام بمختلف المهام التلاعب MSI، على سبيل المثال WiRunSQL.vbs
تمكنك من تنفيذ SQL التعسفي ضد MSI.
نصائح أخرى
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty
لمزيد من المعلومات اكتب msiexec في سطر الأوامر.
وتحرير: أو تغيير ملف .msi نفسه باستخدام عبارات SQL وتحديث الملكية في الجدول خصائص: http://msdn.microsoft.com/en-us/ مكتبة / aa372021 (VS.85) .aspx اتصال http://msdn.microsoft.com/en-us/ مكتبة / aa368568 (VS.85) .aspx اتصال
وهذا هو إضافة إلىsaschabeaumont الصورة الإجابة في '09. الآن تستخدم DOTNET 4.0
Option Explicit
Const MSI_FILE = "myFilePath.msi"
Const PROPERTY_STRING_Value = "FooBar"
Dim installer, database, view
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (MSI_FILE, 1)
' Update
Set view = database.OpenView ("UPDATE Property SET Value = '" & PROPERTY_STRING_Value & "' WHERE Property = 'MYPROPERTY'")
' .. or Add (Insert)
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & PROPERTY_STRING_Value & "')")
view.Execute()
database.Commit()
Set database = Nothing
Set installer = Nothing
Set view = Nothing