Простое решение для замены крошечного файла в MSI?

Да, это возможно. Взгляните на документацию Shared VPC Overview .

Однако не все ресурсы будут общими, вы можете проверить, какие из них поддерживаются здесь .

11
задан Community 23 May 2017 в 11:43
поделиться

4 ответа

Хорошо, пересматривая этот вопрос с моим собственным ответом, предоставляющим миленький сценарий VB, который сделает весь тяжелый подъем. Как упомянуто в исходном вопросе, цель была, предоставляют простое решение для пользователей системного администратора для создания самих обновлений/изменений.

Ниже упрощенная версия кода, который я в настоящее время предоставляю клиентам

Option Explicit

Const MY_CONFIG = "MyConfigApp.xml"
Const CAB_FILE = "config.cab"
Const MSI = "MyApp.msi"

Dim filesys : Set filesys=CreateObject("Scripting.FileSystemObject")

If filesys.FileExists("temp.tmp") Then filesys.DeleteFile("temp.tmp")
filesys.CopyFile MSI, "temp.tmp"

Dim installer, database, database2, view
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("temp.tmp", 1)
Set database2 = installer.OpenDatabase (MSI, 1)

If Not filesys.FileExists(MY_CONFIG) Then WScript.Quit 2 ' No config file, abort!

Dim objFile, size, result, seq, objCab

' MakeCab object has been depreciated so we fallback to makecab.exe for with Windows 7
On Error Resume Next ' Disable error handling, for a moment
Set objCab = CreateObject("MakeCab.MakeCab.1") 
On Error Goto 0  ' Turn error handling back on

If IsObject(objCab) Then ' Object creation successful - use XP method   
    objCab.CreateCab CAB_FILE, False, False, False
    objCab.AddFile MY_CONFIG, filesys.GetFileName(MY_CONFIG)
    objCab.CloseCab
    Set objCab = Nothing
Else ' object creation failed - try Windows 7 method
    Dim WshShell, oExec
    Set WshShell = CreateObject("WScript.Shell")
    Set oExec = WshShell.Exec("makecab " & filesys.GetFileName(MY_CONFIG) & " " & CAB_FILE)
End If

Set objFile = filesys.GetFile(MY_CONFIG)
size = objFile.Size

Set view = database.OpenView ("SELECT LastSequence FROM Media WHERE DiskId = 1")
view.Execute
Set result = view.Fetch
seq = result.StringData(1) + 1 ' Sequence for new configuration file

Set view = database.OpenView ("INSERT INTO Media (DiskId, LastSequence, Cabinet) VALUES ('2', '" & seq & "', '" & CAB_FILE & "')")
view.Execute

Set view = database.OpenView ("UPDATE File SET FileSize = " & size & ", Sequence = " & seq & ", FileName = 'MYC~2.CNF|MyConfigApp.xml' WHERE File = '" & MY_CONFIG & "'")
view.Execute

database.GenerateTransform database2, "CustomConfig.mst"
database.CreateTransformSummaryInfo database2, "CustomConfig.mst", 0, 0
filesys.DeleteFile("temp.tmp")

Set view = nothing
Set installer = nothing
Set database = nothing
Set database2 = nothing
Set filesys = Nothing
WScript.Quit 0

Обновление: MakeCab. Объект MakeCab.1 обесценивался, код, обновленный, чтобы теперь работать с Windows 7.

9
ответ дан 3 December 2019 в 08:06
поделиться

Я предполагаю, что Вы создаете msi файл сами (?)

То, когда Вы используете Wix для генерации msi, клиент может просто повторно создать целый msi после замены файла (wix свободно). Иначе должно быть возможно использовать несжатый файл, который не встраивается в msi. В wix необходимо добавить медиа-элемент без атрибута корпуса. Недостаток - то, что необходимо распределить два файла вместо единственного msi.

2
ответ дан 3 December 2019 в 08:06
поделиться

Необходимо добавить запись в таблицу Media, добавив другой носитель без файла корпуса и LastSequence еще один, чем последняя последовательность файла CAB. Затем необходимо заменить в Таблице файлов последовательность файла с новым файлом и обновить все другие атрибуты файла, которые, возможно, изменились.

1
ответ дан 3 December 2019 в 08:06
поделиться

ИМХО такой сценарий указывает на отсутствие функции в устанавливаемом приложении, и его легче исправить в приложении, чем взломать MSI.


Admin Image

Позвольте мне Сначала скажите, что простой способ «решить» эту проблему для ваших пользователей - это сказать им, чтобы они запустили административную установку вашего MSI. Это по существу извлечет все файлы из внутренних CAB и поместит все файлы в указанную папку:

msiexec.exe / a myinstaller.msi TARGETDIR = C: \ AdminImage

После этого ваши пользователи смогут перейти непосредственно в извлеченную папку структурируйте и обновите соответствующий файл, а затем сопоставьте каталог с другим ПК и установите MSI. У этого могут быть побочные эффекты, связанные с файлом, имеющим хеш-значение в MSI (чтобы избежать спуфинга), но в большинстве случаев он работает нормально.


Запуск XML XPath Query

Новые версии инструментов развертывания, такие как Installshield и Wix, имеют встроенную поддержку для выполнения запросов XPath во время установки и, следовательно, динамического создания разделов.


Обновление приложения

Настройка приложения на ПК состоит из нескольких этапов. Во-первых, это развертывание контента на машине - это должно быть сделано с использованием MSI, без сомнения. Однако в большинстве продвинутых приложений требуется несколько «задач настройки после установки», подобных этому «обновлению файла конфигурации».

Почти всегда лучше отложить эти задачи настройки до запуска приложения , а не для реализации функций в MSI. Есть много причин для этого, но наиболее важным является то, что только EXE приложения будет гарантированно работать в правильном пользовательском контексте. Файлы MSI можно запускать с системными правами, с другой учетной записью или с помощью какого-либо другого механизма.

Обычно мы рекомендуем использовать MSI для загрузки всего необходимого контента на ПК . Затем отметьте реестр, чтобы указать приложению, что это первый запуск (для обновлений вы можете увеличить счетчик или записать новый номер версии в HKLM). Затем приложение может выполнить последние шаги настройки в своей программе запуска. Он может скопировать файл config.xml по умолчанию откуда-нибудь из% ProgramFiles% и скопировать его в профиль пользователя. Затем он может считывать требуемые значения из HKLM, записанные MSI, а затем обновлять файл config.xml этими значениями.

В общем: избегайте шагов настройки, выполняемых MSI или любым другим механизмом настройки. Сосредоточьтесь на записи необходимых файлов и элементов реестра на машину, а затем позвольте приложению настроить надлежащую среду выполнения. Это позволит лучше контролировать развертывание. Если хотите, лучше "Инкапсуляция". MSI отправляет «сообщение» приложению через реестр, и приложение знает, «как правильно настроить себя» на основе сообщений.

2
ответ дан 3 December 2019 в 08:06
поделиться
Другие вопросы по тегам:

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