Всем привет!
Не знаю, насколько реальна задача - в скрипте предопределено в коде запуск программы, если она расположена в одной папке со скриптом. Но это может быть и не так. Задача - если программа не обнаружена в папке скрипта, находить ее и запускать. Если не находится - выдавать сообщение.Рабочих примеров нет, программа может быть любой
[решено] Поиск программы по имени и ее запуск
-
Creat0R
Re: [решено] Поиск программы по имени и ее запуск
Цитата eus_deus:
Не знаю, насколько реальна задача
Ты будешь удивлён, но на AutoIt много чего реально
.
Цитата eus_deus:
Задача - если программа не обнаружена в папке скрипта, находить ее и запускать
Встречный вопрос - где искать?
Не знаю, насколько реальна задача
[решено] Поиск программы по имени и ее запуск
Ты будешь удивлён, но на AutoIt много чего реально
.Цитата eus_deus:
Задача - если программа не обнаружена в папке скрипта, находить ее и запускать
[решено] Поиск программы по имени и ее запуск
Встречный вопрос - где искать?
-
eus_deus
Re: [решено] Поиск программы по имени и ее запуск
Creat0R, если бы я знал, куда ее могут закидывать люди, было бы просто.. давайте попробуем диск, откуда запускается скрипт
-
Creat0R
Re: [решено] Поиск программы по имени и ее запуск
Цитата eus_deus:
давайте попробуем диск, откуда запускается скрипт
Можно искать и на всех дисках, но сколько времени это займёт...
Может проще предоставить выбор поиска пользователю, который сам укажет путь?
давайте попробуем диск, откуда запускается скрипт
[решено] Поиск программы по имени и ее запуск
Можно искать и на всех дисках, но сколько времени это займёт...
Может проще предоставить выбор поиска пользователю, который сам укажет путь?
-
eus_deus
Re: [решено] Поиск программы по имени и ее запуск
Creat0R, тогда самое простое - вообще ничего не менять и явно сказать, что скрипт должен быть в одной папке с программой.
-
eus_deus
Re: [решено] Поиск программы по имени и ее запуск
Creat0R, да, поиск катастрофически долгий (около двух минут)
-
Creat0R
Re: [решено] Поиск программы по имени и ее запуск
Тоже верно.
Но всё таки вот пример поиска первого файла (на всех локальных дисках):
Но всё таки вот пример поиска первого файла (на всех локальных дисках):
Код: Выделить всё
$aDrives = DriveGetDrive('FIXED') ;Только локальные диски
$sAppName = 'MyApp.exe'
$sAppPath = ''
For $i = 1 To UBound($aDrives)-1
$aSearch = _FileSearch($aDrives[$i], $sAppName)
If Not @error Then
$sAppPath = $aSearch[1]
ExitLoop
EndIf
Next
If $sAppPath <> '' Then
MsgBox(64, 'Title', $sAppName & ' found as: ' & $sAppPath)
Else
MsgBox(48, 'Title', $sAppName & ' not found.')
EndIf
Func _FileSearch($sPath, $sFile)
Local $sOut, $aOut, $sRead, $hDir
If Not StringInStr(FileGetAttrib($sPath), 'D') Then
Return SetError(1, 0, 0)
EndIf
$sOut = StringToBinary('0' & @CRLF, 2)
$sPath = StringRegExpReplace($sPath, '\\+$', '')
$hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $sFile & '" /B /S /A-D', @SystemDir, @SW_HIDE, 6)
While ProcessExists($hDir)
$sRead = StdoutRead($hDir, False, True)
If @error Then
ExitLoop
EndIf
If $sRead <> '' Then
$sOut &= $sRead
If StringInStr($sOut, $sFile) Then
ExitLoop
EndIf
EndIf
Wend
$aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
If @error Or UBound($aOut) < 2 Then
Return SetError(2, 0, 0)
EndIf
$aOut[0] = UBound($aOut)-1
Return $aOut
EndFunc