Как программно считать свойства в файле MSI?

Итак, добавьте пустой атрибут action в form и заполните новый input заголовком, выбранным при отправке формы. Также измените имя последнего входа, так как searchtitle уже используется select, и добавьте атрибут selected к элементу option:

<form action="" method="post">
    <select name="searchtitle" id="drp_dwn">
        <?php
        $records = $conn->query("SELECT titles from products");
        if ($records->num_rows > 0)
        {
            while ($row = $records->fetch_assoc())
            {
                $selected = '';
                if ($row['titles'] === 

Итак, добавьте пустой атрибут action в form и заполните новый input заголовком, выбранным при отправке формы. Также измените имя последнего входа, так как searchtitle уже используется select, и добавьте атрибут selected к элементу option:

[110]POST['searchtitle']) { $selected = 'selected'; } echo "<option " . $selected . " value=\"" . $row['titles'] . "\"> " . $row['titles'] . "</option>"; } } ?> </select> <input type="submit" class="button" value="Show"> <?php if (!empty(

Итак, добавьте пустой атрибут action в form и заполните новый input заголовком, выбранным при отправке формы. Также измените имя последнего входа, так как searchtitle уже используется select, и добавьте атрибут selected к элементу option:

[110]POST)) { ?> <input type="text" id="textArea" class="product-new-textbox" name="searchtitle1" value="<?php echo

Итак, добавьте пустой атрибут action в form и заполните новый input заголовком, выбранным при отправке формы. Также измените имя последнего входа, так как searchtitle уже используется select, и добавьте атрибут selected к элементу option:

[110]POST['searchtitle']; ?>" /> <?php } ?> </form>
5
задан Stein Åsmul 14 October 2018 в 04:22
поделиться

4 ответа

Можно использовать основанный на COM API для работы с MSI и сделать что-то как

Function GetVersion(ByVal msiName)

    Const msiOpenDatabaseModeReadOnly = 0
    Dim msi, db, view

    Set msi = CreateObject("WindowsInstaller.Installer")
    Set db = msi.OpenDataBase(msiName, msiOpenDatabaseModeReadOnly)
    Set view = db.OpenView("SELECT `Value` FROM `Property` WHERE `Property` = 'ProductVersion'")
    Call view.Execute()

    GetVersion = view.Fetch().StringData(1)

End Function
6
ответ дан 12 December 2019 в 19:46
поделиться

Можно использовать Orca.exe Microsoft. Косатка позволит Вам открывать MSI и редактировать/просматривать все таблицы в нем. Необходимо будет загрузить весь Windows SDK для получения его, но к счастью который свободен.

Одна альтернатива (который мог бы произойти быстрее из-за размера загрузки SDK) должна использовать dark.exe из проекта WiX. Темный декомпилятор MSI, который экспортирует все в XML-файл и набор ресурсов. XML, который это производит, будет иметь информацию, которую Вы ищете.

6
ответ дан 12 December 2019 в 19:46
поделиться

Набор инструментов WiX : Советы по быстрому запуску WiX (сбор ссылок на ресурсы). WiX устанавливает DTF.


Я просто хочу отметить, что теперь все стало еще проще. Существует полная оболочка .NET для объектной модели установщика Windows, поэтому вы можете избежать проблем с COM-взаимодействием .

DTF - Начало работы : Основной файл: Microsoft.Deployment. WindowsInstaller.dll

  1. Загрузите и установите инструментарий WiX
  2. Найдите файлы ниже в каталоге WixInstallPath \ SDK

Оболочка называется « Deployment Tools Foundation » ( DTF), и вот основное описание: « Deployment Tools Foundation - это богатый набор библиотек классов .NET и связанных ресурсов, которые вместе переносят технологии платформы развертывания Windows в мир .NET. dll - Расширенные классы для работы с установкой Windows Installer и пакетами исправлений.

Просто создайте проект C #, создайте ссылку на эти файлы и создайте собственное приложение развертывания с любым контролем, который вам нужен и который вам нужен. В настоящий момент я не использую инструменты для DTF, но см. этот пример , чтобы получить общее представление о том, как будет работать программа на C #.

  • DTF включен в WIX. Загрузите WiX отсюда .
  • DLL-файлы DTF находятся в папке SDK в основной папке установки WiX (расположение по умолчанию:% ProgramFiles (x86)% \ WiX Toolset v3.10 \ SDK). К тому времени, как вы это увидите, номер версии, вероятно, будет другим. Просто найдите папку WiX в% ProgramFiles (x86)%.
  • Найдите файлы справки DTF в папке «doc». DTF.chm и DTFAPI.chm . Абсолютно отличная документация по объектной модели и ее использованию.
  • См. этот пост serverfault.com для получения дополнительной информации о DTF
  • Некоторые начальные предложения по работе с WiX: MSI vs nuget: пакеты: что лучше для непрерывной доставки?
6
ответ дан 12 December 2019 в 19:46
поделиться

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

Option Explicit
Const MY_MSI = "product.msi"

Dim installer, database, view, result, sumInfo, sPackageCode

Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (MY_MSI, 0)

Set sumInfo = installer.SummaryInformation(MY_MSI, 0)
sPackageCode =  sumInfo.Property(9) ' PID_REVNUMBER = 9, contains the package code.

WScript.Echo "ProductVersion=" & getproperty("ProductVersion")
WScript.Echo "ProductCode=" & getproperty("ProductCode") 
WScript.Echo "PackageCode=" & sPackageCode 
WScript.Echo "ProductName=" & getproperty("ProductName") 

Function getproperty(property)

    Set view = database.OpenView ("SELECT Value FROM Property WHERE Property='" & property & "'")
    view.Execute
    Set result = view.Fetch
    getproperty = result.StringData(1)

End Function 
3
ответ дан 12 December 2019 в 19:46
поделиться
Другие вопросы по тегам:

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