Использовать 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-скрипт можно использовать в сборках.
Эта ссылка может помочь вам написать необходимую.