7

Komut satırından kısa bir metin özelliği eklemem veya değiştirmem gereken bir MSI yükleyicim var.Bir MSI içinde bir özelliği komut satırından nasıl ekleyebilirim/güncellerim?

Bu, yükleyici oluşturulduktan sonra yapılmalıdır; Yükleyiciyi üreten işlemi ilk sırada değiştiremem. Ayrıca bir senaryodan başsız yürütülmesi gerekir.

"Özellik" dediğimde, MSI özelliği, yükleme zamanında kayıt defterine yazılan bir değer veya bu kısa özel metni çalıştırıldığında yüklü uygulamaya alabilecek başka bir mekanizma olabilir.

cevap

12

Örnek VBScript Güncellemek kullanabilirsiniz (veya ekleme) inşa ...

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 

daha fazla bilgi için, çeşitli MSI manipülasyon görevleri yapmak için komut satırından kullanabilirsiniz örnek komut bir demet örneğin, orada Windows Installer SDK (Windows SDK parçası) kontrol WiRunSQL.vbs, bir MSI'ye karşı rasgele SQL çalıştırmanıza izin verir.

+2

Paketi değiştirdiğinizde Özet Bilgi Akışı'nda paket kodunu güncellemeyi unutmayın. Bir özellik değerini değiştirirken, farklı değerlere sahip birden çok .msi dosyasını yayınlasanız bile, gerçek sorunlara neden olma ihtimali yoktur, yine de yapmanız gereken bir şeydir. –

+0

Yalnızca dönüşümler oluştururken Özet Bilgilerini güncellemem gerektiğini, yalnızca tüm değişiklikler için neden güncellemeniz gerektiğinin herhangi bir nedenini buldum. – saschabeaumont

+0

http://msdn.microsoft.com/en-us/library/aa370568(VS.85).aspx –

5
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty 

Daha fazla bilgi için, komut satırında msiexec yazın.

DÜZENLEME: ya sql ifadeleri kullanarak ve özellikleri tabloda özelliğini güncelleyerek .msi dosyasını kendisi değiştirin: Bir özellik tekrar- http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

+0

Yeni bir mülkle INSTALLS'ı düşündüm. Yüklemek istemiyorum, MSI dosyasını MODIFY'ye ihtiyacım var. –

+0

Bunun, OP'nin sorusuyla belirlenen kritere uyması nedeniyle bu düşüşün hak ettiğini düşünmüyorum. Post-build, bir MSI özelliğidir ve kesinlikle, "bu kısa özel metni, çalıştırıldığında yüklü uygulama içine alabilen herhangi bir mekanizmadır." MSI'nin kendisini değiştirmiyor, ancak bunu yükleyicinin çalışma zamanında yapması aynı sonuçtur. – SpellingD

+0

@ZippyV Bağlantıları paylaştığınız için teşekkür ederiz! – Rama

0

Bu, @saschabeaumont'un '09'daki yanıtına eklemek içindir. Şu anda dotTM 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 
+0

Bu, dotnet kodu değil. – Crono

+0

bir şekilde en son yazan @asarenski çalıştı ama bir önceki saschabeaumont tarafından bir değişiklik yapılmadı msi. +1 – Prasoon

İlgili konular