7

Mam instalator MSI, w którym muszę dodać lub zmodyfikować właściwość krótkiego tekstu z wiersza polecenia.Jak dodać/zaktualizować właściwość wewnątrz MSI z wiersza polecenia?

To musi zostać wykonane po zbudowaniu instalatora; Nie mogę zmodyfikować procesu, który tworzy instalator w pierwszej kolejności. Musi być również wykonany bez nagłówka ze scenariusza.

Kiedy mówię "właściwość", może to być właściwość MSI, wartość, która zostanie zapisana do rejestru podczas instalacji, lub jakikolwiek inny mechanizm, który może uzyskać ten krótki tekst niestandardowy do zainstalowanej aplikacji, gdy jest uruchomiony.

Odpowiedz

12

przykładzie VBScript, które można wykorzystać do aktualizacji (lub dodać) nieruchomość post- budować ...

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 

aby uzyskać więcej informacji, zapoznaj się z SDK Instalatora Windows (część Windows SDK), istnieje grono przykładowych skryptów, które można użyć w wierszu polecenia, aby wykonać różne zadania manipulacji MSI, na przykład WiRunSQL.vbs umożliwia wykonywanie dowolnych instrukcji SQL na MSI.

+2

Nie zapomnij zaktualizować kodu pakietu w strumieniu informacji zbiorczych podczas zmiany pakietu. Chociaż zmiana wartości właściwości prawdopodobnie nie spowoduje rzeczywistych problemów, nawet jeśli zwolnisz wiele plików .msi o różnych wartościach, nadal musisz coś zrobić. –

+0

Odkryłem tylko, że muszę zaktualizować informacje o podsumowaniu podczas tworzenia transformacji, czy jest jakiś powód, dla którego musisz zaktualizować wszystkie zmiany? – saschabeaumont

+0

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

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

Aby uzyskać więcej informacji, wpisz msiexec w linii poleceń.

EDIT: albo zmiany samego pliku msi za pomocą SQL i aktualizując właściwość w tabeli Właściwości: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

+0

Myślałem, że INSTALACJE z nową własnością. Nie chcę instalować, potrzebuję ZMIENIĆ plik MSI. –

+0

Nie sądzę, aby zasłużyło na to poparcie, ponieważ odpowiada to kryteriom określonym w pytaniu OP. Post-build jest właściwością MSI i jest z pewnością "dowolnym innym mechanizmem, który może uzyskać ten krótki niestandardowy tekst do zainstalowanej aplikacji, gdy jest uruchomiony." To nie zmienia samego MSI, ale robienie tego w środowisku wykonawczym instalatora jest faktycznie tym samym wynikiem. – SpellingD

+0

@ZippyV Dzięki za udostępnienie linków! – Rama

0

To jest dodanie do odpowiedzi @saschabeaumont w '09. Obecnie używa 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 
+0

To nie jest kod dotnet. – Crono

+0

jakoś najnowszy opublikowany przez @asarenski pracował, ale poprzedni przez saschabeaumont nie dokonał zmian w msi. +1 – Prasoon

Powiązane problemy