Что нового

Неизвестная папка на пути к исполняющему файлу

Webarion

Осваивающий
Сообщения
143
Репутация
24
Немного поразмышлял на эту тему:

Код:
#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')
 
Верх