Немного поразмышлял на эту тему:
Код:
#Include-Once
#Include <File.au3>
#Include <misc.au3>
#cs
Скрипт получения пути к последней версии. Результат работы будет помещён в глобальную переменную $VERSION1S
Скрипт работает так:
Если скрипт не обнаруживает стандартный путь @ProgramFilesDir & '\1c', то запрашивает его расположение
Найдя версию, проверяет в ней расположение программы @ProgramFilesDir & '\1c\n.n.n.n\bin\file.exe'
Если программа не найдена, запрашивает её относительный путь, который не будет привязан к версии
Для последующего автоматического открытия, основной путь к 1с и относительный к программе, записываются
в конфигурационный файл в одной папке со скриптом и при последующих запусках извлекаются из него.
Порядок действий:
Данный скрипт сохранить в файле version1s.au3
В этой же папке со скриптом создать другой файл, например testVersion1S.au3 с содержимым:
;--------Start--------
#Include "version1s.au3"
MsgBox(0, 'Путь к последней версии', $VERSION1S)
;---------End---------
#ce
Global $dir1s = @ProgramFilesDir & '\1c' ;Путь к стандартной папке, содержащей папки версий n.n.n.n
Global $filePath = '\bin\file.exe' ;Относительный путь к стандартной программе внутри папки с версией
Global $VERSION1S
Func _GetPathLatestVersion1S()
Local $dirCV, $pathCV, $sCurVer, $msg, $aList, $dirVers
Local $confFile = @ScriptDir & '\conf.ini'
$dirCV = IniRead($confFile, '1S', 'dir1s', $dir1s) ; если ранее был указан нестандартный путь, то читает его из файла конфигурации conf.ini
If Not FileExists($dirCV) Then $msg = MsgBox(1 + 48, 'Внимание!', 'Не удалось обнаружить стандартную общую папку:' & @CRLF & $dirCV & @CRLF & 'Хотите указать её самостоятельно?')
If $msg = 1 Then
$dirCV = FileSelectFolder('Укажите путь к папке с версиями', @ProgramFilesDir)
EndIf
If FileExists($dirCV) Then
IniWrite($confFile, '1S', 'dir1s', $dirCV)
Else
Return SetError(1)
EndIf
$aList = _FileListToArray($dirCV, '?.?.?.?', 2)
If @Error Then Return SetError(2)
For $i = 1 To $aList[0]
If _VersionCompare($sCurVer, $aList[$i]) = -1 Then $sCurVer = $aList[$i]
Next
$dirVers = $dirCV & '\' & $sCurVer
$pathCV = IniRead($confFile, '1S', 'pathfile', $filePath)
If Not FileExists($dirVers & $pathCV) Then $msg = MsgBox(1 + 48, 'Внимание!', 'Папка с последней версией обнаружена:' & @CRLF & $dirVers & @CRLF & 'Но не удалось обнаружить стандартную программу по пути ' & @CRLF & $dirVers & $pathCV & @CRLF & 'Хотите указать путь к ней самостоятельно? Путь будет считаться относительным (например: \bin\program.exe) и не будет привязан к какой-либо версии')
If $msg = 1 Then
$pathCV = FileOpenDialog('Укажите путь к файлу file.exe', $dirVers & '\', 'Программы (*.exe)', 1)
EndIf
If FileExists($pathCV) Then
IniWrite($confFile, '1S', 'pathfile', StringReplace($pathCV, $dirVers, ''))
EndIf
$VERSION1S = $dirVers & $pathCV
ConsoleWrite($VERSION1S)
Return $VERSION1S
EndFunc
_GetPathLatestVersion1S()
If @Error = 1 Then ConsoleWrite('Не удалось обнаружить общую папку содержащую папки со всеми версиями')
If @Error = 2 Then ConsoleWrite('Общая папка обнаружена, но в ней нет папок с версиями в формате n.n.n.n')