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