Что нового

Непонятная ошибка скомпилированного скрипта

lettterssino

Знающий
Сообщения
109
Репутация
10
Добрый день, может кто подскажет в чём проблема. Суть в том, что на некоторый машинах он отрабатывает, а на некоторых просто падает с ошибкой синтаксиса. Суть программы считывать из файла на рабочем столе версию и искать совпадение на сетевом диске, после этого запускать по найденному пути файл.
Код:
#include <File.au3>
#include <FileOperations.au3>
#include <FileConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <Debug.au3>
#include <Array.au3>
#include <Encoding.au3>

Global $1 = FileRead(@DesktopDir & '\version.txt')
Global $2 = StringLeft ($1 , 2) ; извлекает версию
Global $3 = StringSplit($1,'.') ; извлекает ревизию


Global $aFileList = _FO_FileSearch('\\mfs\Distribs\KOMPAS-3D\' & $2 , 'KompasInvisibleInstaller*.msi', True, 125, 1, 2, '',0)
$i = 0
$ProductVersion = 0
While $1 <> $ProductVersion


    $oInstaller = ObjCreate("WindowsInstaller.Installer") ;<====== Данная фукнция извлекает информацию из msi пакета
    $oDB = $oInstaller.OpenDataBase($aFileList[$i], 0)
    $oView = $oDB.OpenView("SELECT Property,Value FROM Property")

    $oView.Execute()

    $oCount = 0

    While @error = 0
        $oRecords = $oView.Fetch
        If Not (IsObj($oRecords)) Then ExitLoop ;<====== Данная фукнция извлекает информацию из msi пакета

        $oPropValue = $oRecords.StringData(2)
        $oPropName = $oRecords.StringData(1)
        If $oPropName = 'ProductName' Then ; указывает на название продукта
            Global $ProductName = $oPropValue
        ElseIf $oPropName = 'ProductVersion' Then ; указывает на полную версию (0.0.0.0)
            Global $ProductVersion = $oPropValue
        ElseIf $oPropName = 'ProductVersionF' Then ; указывает на версия 
            Global $ProductVersionF = $oPropValue
        ElseIf $oPropName = 'BuildNumber' Then ; указывает на номер сборки
            Global $BuildNumber = $oPropValue
        EndIf
        If $oPropName <> "" Then
            $oCount += 1
            ConsoleWrite($oPropName & " = " & $oPropValue & @CRLF)
        EndIf
        If $1 = $ProductVersion Then
        ;Global $MsiFilePath = $aFileList[$i]
        EndIf
    WEnd
    $i = $i + 1
WEnd


ShellExecute($MsiFilePath)

ProcessWaitClose('msiinstaller.exe')
MsgBox (1,'', 'Установка завершена')

$err = ShellExecute("C:\Program Files\Common Files\ASCON Shared\KsInvisible\Bin\ksinvisible.exe",'-automation')
Sleep(200)
If WinExists('ksinvisible.exe') = 1 Then

    while WinExists('ksinvisible.exe') = 1
        WinClose('ksinvisible.exe')
    WEnd
    $err = ProcessWaitClose('ksinvisible.exe')
    $StatusCode = @extended
ElseIf WinExists('ksinvisible.exe') <> 1 Then
    Sleep(2500)
    ProcessClose('ksinvisible.exe')
    $err = ProcessWaitClose('ksinvisible.exe')
    $StatusCode = @extended
EndIf

If $StatusCode = 0 Then
    $Status = 'yes'
Elseif $err <> 0 Then
    $Status = 'no'
EndIf


    If $Status = 0 Then
        Exit 0
    Elseif $Status <> 0 Then
        Exit 1
    EndIf
 

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
Тут можно гадать в чём она...
Autoit ошибку выдаёт с номером строки - возможно надо поставить проверку в этом месте
Возможно у файла нет тех свойств, которые ищете
Когда-то поднимал тему для получения информации из VERSION_INFO
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
глобальную переменную $MsiFilePath объявите в начале кода
в остальном не видно ошибки. возможно, это не ошибка синтаксиса, а следствие того, что массив не получен или ошибка создания объекта
надо было скрин ошибки прикрепить
 
Верх