Использовать Orca для редактирования MSI из командной строки? - PullRequest
17 голосов
/ 20 мая 2009

Я использую Visual Studio 2008 и создал проект установки для своего приложения. Приложение имеет значок высокого разрешения (для Vista). В Visual Studio есть ошибка, и установщик создает ярлык на рабочем столе со значком низкого разрешения.

Я зарегистрировал эту ошибку в Microsoft Connect (https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258) и, наконец, получил ответ, который заключается в использовании Orca для редактирования файла msi и замены значка. Это решение работает отлично.

Теперь я хочу автоматизировать этот процесс, чтобы я мог включить его в свой скрипт сборки. Есть ли способ сделать это?

Ответы [ 5 ]

37 голосов
/ 17 июня 2010

Возможно, самое простое решение, которое я нашел для этого, - это создать новое "Преобразование" внутри Orca, а затем применить преобразование как часть моих шагов после сборки.

1) Откройте файл MSI, используя ORCA для редактирования. 2) Нажмите «Новое преобразование» 3) Внесите все необходимые изменения в таблицы MSI с помощью редактора Orca. 4) Нажмите «Создать преобразование» и сохраните файл. 5) Отредактируйте ваши события сборки для выполнения msitran во время шага после сборки. как это ...

msitran -a (путь к файлу преобразования) (путь к файлу MSI)

Дополнительную информацию о MSITran.exe можно найти по следующему адресу ... MSITran

Это автоматически применяет ваши изменения к MSI-файлу после завершения сборки установщика, устраняя необходимость в пользовательском VBScript.

11 голосов
/ 20 мая 2009

Вы можете написать VBS, JS (используя cscript, который встроен в каждую Windows) для изменения MSI, синтаксис в значительной степени похож на SQL. Вот страница MSDN, которая показывает различные примеры.

7 голосов
/ 14 мая 2010

Мне тоже пришлось это сделать - вот мой файл VBScript (на случай, если он кому-нибудь пригодится) ...

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

Этот сценарий заменяет все значки ярлыков в базе данных MSI одним значком - если вам нужно быть избирательным, вам нужно еще кое-что сделать.

2 голосов
/ 28 апреля 2010

Поскольку вы привыкли работать с Orca, просто сохраните изменения в виде файла преобразования с помощью Orca, а затем примените его с помощью «msitran» в событии после сборки вашего проекта установки. Я использую это в проекте установки, и он просто отлично работает.

2 голосов
/ 20 мая 2009

Вы можете использовать Perl-скрипт для изменения MSI-пакета установщика. Для этого вы можете использовать Win32 OLE . Откройте MSI, используя Win32::OLE->new API. Откройте базу данных MSI и выполните запросы SQL, чтобы выполнить обновление.

Этот скрипт на perl можно использовать в сборках.

Эта ссылка может помочь вам написать необходимую.

...