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

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

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

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

Ответы

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Эта ссылка может помочь вам записать требуемый файл.

Ответ 5

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