Список таблиц в MSI-файл? - PullRequest
       8

Список таблиц в MSI-файл?

1 голос
/ 12 октября 2019

Как можно использовать SQL для вывода списка в MSI-файле ?

1 Ответ

2 голосов
/ 12 октября 2019

MSI SDK : Таблица _Tables является системной таблицей только для чтения, в которой перечислены все таблицы в базе данных. Запросите эту таблицу, чтобы узнать, существует ли таблица.

Адаптация сценария WiExport.vbs из примеров сценариев установщика Windows из WindowsУстановщик SDK получает примерно следующее:


MSI SDK VBScripts : для поиска WiExport.vbs: с установленной Visual Studio смотрите: %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.17763.0\x86 (откорректируйте номера версий для текущей установки) (или просто найдите его на github.com).


Пример снимка экрана : Ниже приведен пример запуска сценария:

enter image description here

Образец : Процедура для сценария:

  • 1) сохранить как ListMSITables.vbs на рабочем столе (ссылка на github.com)
  • 2) перетащите файл MSI на VBScript
  • 3) в окне сообщения будет показано количество таблиц и имена таблиц

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

On Error Resume Next
Const msiOpenDatabaseModeReadOnly = 0

Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim counter : counter = 0

' Verify incoming drag and drop arguments
If WScript.Arguments.Count = 0 Then MsgBox "Drag and drop an MSI file onto the VBScript" End If
filename = Wscript.Arguments(0)
If (Right (LCase(filename),3) <> "msi") Then 
   WScript.Quit
End If

Dim database : Set database = installer.OpenDatabase(filename, msiOpenDatabaseModeReadOnly)
Dim table, view, record

Set view = database.OpenView("SELECT `Name` FROM _Tables")
view.Execute

Do
    Set record = view.Fetch
    If record Is Nothing Then Exit Do
    table = record.StringData(1)
    tables = tables + table + vbNewLine
    counter = counter + 1
Loop

MsgBox "Number of tables: " + CStr(counter) + vbNewLine + vbNewLine + tables

Set view = Nothing

Github.com : Выше очевидно, VBScript. Просто грабите github.com , чтобы узнать больше о всех видах языков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...