Использовать Orca для редактирования MSI из командной строки?

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

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

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

5 ответов

Решение

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

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

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

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

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

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

Я просто должен был сделать это тоже - вот мой файл 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 одним значком - если вам нужно быть избирательным, вам нужно еще поработать.

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

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

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

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

Другие вопросы по тегам