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

Я нашел способ узнать, открыта ли консоль Chrome или нет. Это все еще хак, но он более точен и будет работать, когда консоль отстыкована или нет.

В основном выполнение этого кода с закрытой консолью занимает около ~ 100 микросекунд, а когда консоль открыта, она занимает примерно вдвое больше ~ 200 микросекунд.

console.log(1);
console.clear();

(1 миллисекунда = 1000 микросекунд)

Я написал больше об этом здесь .

Демо-версия здесь .


Обновление:

@zswang нашел наилучшее на данный момент решение - посмотрите его ответ

18
задан DanielR 20 May 2009 в 08:35
поделиться

5 ответов

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

11
ответ дан 30 November 2019 в 06:04
поделиться

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

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

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

2
ответ дан 30 November 2019 в 06:04
поделиться

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

2
ответ дан 30 November 2019 в 06:04
поделиться

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

7
ответ дан 30 November 2019 в 06:04
поделиться

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

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

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

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

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

37
ответ дан 30 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: