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?
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.
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.
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.
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.
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.
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