Użyj Orca do edycji msi z wiersza poleceń?

Używam Visual Studio 2008 i stworzyłem projekt instalacji dla mojej aplikacji. Aplikacja posiada ikonę o wysokiej rozdzielczości (dla Visty). W programie Visual Studio pojawił się błąd, a instalator tworzy skrót na pulpicie z ikoną niskiej rozdzielczości.

Zarejestrowałem ten błąd w Microsoft Connect ( https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258) i w końcu otrzymałem odpowiedź, którą jest użycie Orca do edycji pliku msi i zastąpienia ikony. Że rozwiązania działają dobrze.

Teraz chcę zautomatyzować ten proces, aby móc włączyć go do mojego skryptu budowania. Jest na to sposób?

Author: DanielR, 2009-05-20

5 answers

Możesz pisać VBS, JS (używając cscript, który jest wbudowany w każdy Windows), aby zmodyfikować MSI, składnia jest prawie podobna do SQL. oto strona MSDN, która pokazuje różne przykłady.

 11
Author: Shay Erlichmen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 08:54:44

Prawdopodobnie najprostszym rozwiązaniem, jakie znalazłem, było stworzenie nowej "transformacji" wewnątrz orki, a następnie zastosowanie tej transformacji jako części moich kroków po zbudowaniu.

1) Otwórz plik MSI za pomocą ORCA do edycji. 2) Kliknij na " New transform" 3) dokonaj wszystkich stosownych zmian w tabelach MSI za pomocą edytora Orca. 4) Kliknij "Wygeneruj transformację" i zapisz plik. 5) Edytuj zdarzenia kompilacji, aby wykonać msitran podczas etapu po kompilacji. jak to...

Msitran-a (ścieżka do pliku przekształcenia) (ścieżka do pliku MSI)

Więcej informacji o MSITran.exe można znaleźć w następującej lokalizacji... MSITran

Spowoduje to automatyczne wprowadzenie zmian do pliku MSI po zakończeniu kompilacji instalatora, eliminując potrzebę stosowania niestandardowego języka VBScript.

 36
Author: Grizzly Peak Software,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-17 17:03:12

Ja też musiałem to zrobić - oto mój plik VBScript (na wypadek, gdyby komuś się przydał)...

Dim msiInstaller
Dim msiDatabase
Dim msiView
Dim msiRecord

Dim pathToMsiFile
Dim pathToIconFile

If WScript.Arguments.Count <> 2 Then
    WScript.Echo "Usage:" & vbCrLf & "  " & WScript.ScriptName & " <path-to-msi> <path-to-icon>"
    WScript.Quit
End If

Dim pathToMsi, pathToIcon
pathToMsi = WScript.Arguments(0)
pathToIcon = WScript.Arguments(1)

Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Set msiRecord = msiInstaller.CreateRecord(1)
msiRecord.SetStream 1, pathToIcon

Set msiDatabase = msiInstaller.OpenDatabase(pathToMsi, 1)
Set msiView = msiDatabase.OpenView("UPDATE Icon SET Data = ? WHERE Name <> ''")
msiView.Execute msiRecord

msiDatabase.Commit

Ten skrypt zastępuje wszystkie ikony skrótów w bazie danych MSI jedną ikoną - jeśli musisz być selektywny, masz jeszcze trochę pracy.

 7
Author: Dave Cluderay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-14 10:53:32

Możesz użyć skryptu Perla do modyfikacji pakietu instalatora MSI. Możesz do tego użyć Win32 ole. Otwórz MSI za pomocą API Win32::OLE->new. Otwórz bazę danych MSI i wykonaj zapytania SQL, aby wykonać aktualizację.

Ten skrypt Perla może być używany w buildach.

Tenlink może pomóc w napisaniu wymaganego.

 2
Author: aJ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 08:47:56

Ponieważ jesteś przyzwyczajony do pracy z Orca, po prostu zapisz modyfikacje jako plik transformacji za pomocą Orca, a następnie zastosuj je z 'msitran' w zdarzeniu post build twojego projektu instalacyjnego.
Używam tego w projekcie instalacyjnym i działa świetnie.

 2
Author: Marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-28 06:51:20