Что нового

[Реестр] Сверить версию проги msi файла с реестром

Сообщения
95
Репутация
-1
Доброе время суток. Нужно, чтобы скрипт сверял версию проги из реестра и из msi файла. Если по итогу версия совпадает, то появляется MsgBox с успешной установкой и наоборот
 

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
5-7 минут поиска и немножко сообразить как переделать под Autoit, правда не сложно?
Источник:
Код:
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)
Результат:
Код:
$sFile = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft Visual J# 2.0 Redistributable Package\jsredist.msi'
$oWinInst = ObjCreate('WindowsInstaller.Installer');msi
$oDb = $oWinInst.OpenDataBase($sFile, 0);db
$oView = $oDb.OpenView("SELECT `Value` FROM `Property` WHERE `Property` = 'ProductVersion'")
$oView.Execute()
$sVersion = $oView.Fetch().StringData(1)
ConsoleWrite($sVersion&@CRLF)
Это правда только как из файла msi достать версию продукта.


Добавлено:
Сообщение автоматически объединено:

Ну а чтобы достать версию из реестра, нужно знать в какой ветки её искать.
Может еще кто чем поможет, у меня пока времени мало.
 
Автор
Xabib2302
Сообщения
95
Репутация
-1
IMStrelcov
как достать версию из msi я и так знаю скрипт

Код:
$sMSI = FileOpenDialog("MSI Properties", @ScriptDir, "Windows Installer Files (*.msi)")

MsgBox(0,0,'ProductName: ' & Execute_MSI_Query($sMSI,'ProductName'))
MsgBox(0,0,'Manufacturer: ' & Execute_MSI_Query($sMSI,'Manufacturer'))
MsgBox(0,0,'ProductVersion: ' & Execute_MSI_Query($sMSI,'ProductVersion'))


Func Execute_MSI_Query($MSIPath, $PropertyName)
    If FileExists($MSIPath) And $PropertyName <> '' Then


        Local $Query = "SELECT Value FROM Property WHERE Property = '" & $PropertyName & "'"

        $oInstaller = ObjCreate("WindowsInstaller.Installer")
        $oDB = $oInstaller.OpenDataBase($MSIPath, 0)
        $oView = $oDB.OpenView($Query)

        $oView.Execute()

        $oRecords = $oView.Fetch
        $oPropValue = $oRecords.StringData(1)

        If $oPropValue <> "" Then
            Return $oPropValue
        EndIf

    EndIf

    Return ""
EndFunc
 
Верх