Ответ 1
Вы можете написать VBS, JS (используя cscript, который встроен в каждую Windows) для изменения MSI, синтаксис в значительной степени похож на SQL. Вот страница MSDN, в которой показаны различные примеры.
Я использую Visual Studio 2008 и создал проект установки для своего приложения. Приложение имеет значок с высоким разрешением (для Vista). Там есть ошибка в Visual Studio, и установщик создает ярлык на рабочем столе с иконкой с низким разрешением.
Я зарегистрировал эту ошибку в Microsoft Connect (https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258) и, наконец, получил ответ, который должен использовать Orca для редактирования msi файл и замените значок. Эти решения прекрасно работают.
Теперь я хочу автоматизировать этот процесс, поэтому я могу включить его в мою сборку script. Есть ли способ сделать это?
Вы можете написать VBS, JS (используя cscript, который встроен в каждую Windows) для изменения MSI, синтаксис в значительной степени похож на SQL. Вот страница MSDN, в которой показаны различные примеры.
Возможно, самым легким решением, которое я нашел для этого, было создание нового "Transform" внутри 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
Этот script заменяет все значки ярлыков в базе данных MSI одним значком - если вам нужно быть выборочным, то вам нужно еще сделать работу.
Вы можете использовать perl script для изменения пакета установщика msi. Вы можете использовать Win32 OLE для этого. Откройте MSI с помощью API Win32::OLE->new
. Откройте базу данных MSI и выполните SQL-запросы для обновления.
Этот perl script может использоваться в сборках.
Эта ссылка может помочь вам записать требуемый файл.
Поскольку вы привыкли работать с Orca, просто сохраните изменения как файл преобразования с помощью Orca, а затем примените его с помощью msitran в событии post build вашего проекта установки.
Я использую это в проекте установки, и он отлично работает.