Разбор "строки запуска".

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 29.04.2009 (Ср) 21:32

iGrok писал(а):Что забавно, судя по MSDN прав-таки jangle, говорящий, что поиск идёт слева-направо.


Это элементарная логика. А у основной массы посетителей форума, с этим явно туговато.

За одним исключением. Если ВСЯ СТРОКА ЦЕЛИКОМ совпадает с именем СУЩЕСТВУЮЩЕГО файла/папки - запускается он. Если такого файла/папки нет - начинается парсинг слева-направо по пробелам до первого найденного файла.


Нифига, попробуй распарсить по пробелам путь: C:\TES .EXE\T T.EXE T\FILE .EXE FILE.EXE\TES T.EXE

Изображение

Только посимвольно!

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Разбор "строки запуска".

Сообщение arthur2 » 29.04.2009 (Ср) 21:52

jangle И всё-таки,
За одним исключением. Если ВСЯ СТРОКА ЦЕЛИКОМ совпадает с именем СУЩЕСТВУЮЩЕГО файла/папки - запускается он.


C:\test .exe\t t.exe\file .exe file.exe\tes t.exe

То есть, если в той же папке лежит файл file .exe то запустится не он с параметрами, а всё-таки tes t.exe

Изображение
Вложения
Clipboard02.jpg
Clipboard02.jpg (76.87 Кб) Просмотров: 2775
Артур
 
   

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 29.04.2009 (Ср) 22:12

arthur2 - загрузится кем? Проводником который уже распарсил твой путь?

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Разбор "строки запуска".

Сообщение arthur2 » 29.04.2009 (Ср) 22:19

Забавно, ты дал правильный (почти правильный - за исключением исключения) ответ, но так и не понял вопрос :) Автору как раз и надо узнать, не то, как бы самому распарсить такую строку. А то как станет парсить строку система.

А проводник или, скажем Run распарсит ее именно так :)

Изображение
Вложения
Clipboard04.jpg
Clipboard04.jpg (42.72 Кб) Просмотров: 2760
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Разбор "строки запуска".

Сообщение iGrok » 29.04.2009 (Ср) 22:36

arthur2 писал(а):Ага... но прав-то был-таки jangle :D

Неа. Не jangle.
ANDLL писал(а):Понимает проводник, но у него интелектуальный алгоритм, заключающийся видимо в том что проверяет наличие папки c, в ней папки program files и прочая


jangle писал(а):Нифига, попробуй распарсить по пробелам путь: C:\TES .EXE\T T.EXE T\FILE .EXE FILE.EXE\TES T.EXE

По пробелам, по пробелам. А насчёт полного совпадения строки - это эмпирически полученный факт. Об этом нигде не написано.
MSDN:CreateProcess писал(а):The lpApplicationName parameter can be NULL. In that case, the module name must be the first white space–delimited token in the lpCommandLine string. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin; otherwise, the file name is ambiguous. For example, consider the string "c:\program files\sub dir\program name". This string can be interpreted in a number of ways. The system tries to interpret the possibilities in the following order:

c:\program.exe files\sub dir\program name
c:\program files\sub.exe dir\program name
c:\program files\sub dir\program.exe name
c:\program files\sub dir\program name.exe
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Разбор "строки запуска".

Сообщение arthur2 » 29.04.2009 (Ср) 23:31

хм... Ближе к телу, так сказать.
Берем строку из вопроса:
c:\program files\main.exe folder\autostop.exe /kill old.exe
И заносим её в реестр в Run

Помещаем в папку "program files" файл main.exe, а в "main.exe folder" соответственно autostop.exe
Перезагружаемся :)

Запустился main.exe

Теперь меняем строку в реестре:
c:\program files\main.exe folder\autostop.exe
Согласно имперически полученному "исключению", теперь полное совпадение и должен запуститься autostop.exe... Но запускается снова main.exe!

Так что прав-таки jangle

А с проводником я вообще намудрил - из него запускается только при полном совпадении.

Добавлено
Проверяем, по пробелам парсится или по символам. Для этого меняем пробел на дефис:
c:\program files\main.exe-folder\autostop.exe

Запустился autostop.exe. Так что в этом пункте jangle не прав: таки по пробелам :)
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Разбор "строки запуска".

Сообщение iGrok » 30.04.2009 (Чт) 0:27

При чём тут вообще jangle, если первым же ответом ANDLL сказал что и как парсится?

К чему вообще сейчас эта дискуссия, если всё и так выяснено?

Хотя один положительный момент из последнего поста всё-таки есть. Теперь мы знаем, что при запуске из реестра тот алгоритм, что и в CreateProcess, а не тот, что в Shell / "Выполнить".

Если кто-то ещё раскопает механизм работы registry autorun'а, будет совсем классно...
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 30.04.2009 (Чт) 0:46

arthur2 писал(а):хм... Ближе к телу, так сказать.
Берем строку из вопроса:
c:\program files\main.exe folder\autostop.exe /kill old.exe
И заносим её в реестр в Run

Помещаем в папку "program files" файл main.exe, а в "main.exe folder" соответственно autostop.exe
Перезагружаемся :)

Запустился main.exe

Теперь меняем строку в реестре:
c:\program files\main.exe folder\autostop.exe
Согласно имперически полученному "исключению", теперь полное совпадение и должен запуститься autostop.exe... Но запускается снова main.exe!

Так что прав-таки jangle

А с проводником я вообще намудрил - из него запускается только при полном совпадении.

Добавлено
Проверяем, по пробелам парсится или по символам. Для этого меняем пробел на дефис:
c:\program files\main.exe-folder\autostop.exe

Запустился autostop.exe. Так что в этом пункте jangle не прав: таки по пробелам :)



Все это доказывает, что мой способ распарсивания строки, слева-направо в виде детерминированного конечного автомата (ДКА) - самый правильный.
Почему разработчики Windows его не применили, остается загадкой. Наверное им просто мозгов не хватило. Блин меня там не было! :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 30.04.2009 (Чт) 0:48

iGrok писал(а):При чём тут вообще jangle, если первым же ответом ANDLL сказал что и как парсится?


Cказал, но код не написал... Кроме меня это вообще никто не сделал.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Разбор "строки запуска".

Сообщение iGrok » 30.04.2009 (Чт) 0:53

А чего там писать-то? В кирпичах, кажется, три или четыре парсера командной строки..

А вот что тебя не было в команде разработчиков винды - это да. Жаль. :mrgreen:
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Разбор "строки запуска".

Сообщение arthur2 » 30.04.2009 (Чт) 8:23

iGrok писал(а):При чём тут вообще jangle, если первым же ответом ANDLL сказал что и как парсится?
iGrok писал(а):В этой флудильне делные мысли высказали только ANDLL, alibek и Amed. Все остальные не врубившись в тему вопроса несут какую-то ахинею..
И при этом:
iGrok писал(а):Что забавно, судя по MSDN прав-таки jangle
Amed писал(а):... но на практике он всегда парсится одинаково - слева направо. В этой части jangle прав.
Так при чем тут jangle? Просто его все по нескольку раз ткнули в то, что он "флудит и несёт ахинею, не высказав ни одной дельной мысли", что в рамках данной дискуссии по меньшей мере не справедливо.
Артур
 
   

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Разбор "строки запуска".

Сообщение Debugger » 30.04.2009 (Чт) 8:45

Кто вам мешает парсить справо налево? Найти самый правый слеш; то, что левее его - путь; что правее - екзешник и его параметры; параметры от экзешника и мух от котлет отделить просто: достаточно проверять существование каждого exe.
Мне вот интересен вот такой случай.
В папке 2 файла:
run.exe и
run.exe test.exe
мы запускаем run.exe test.exe... И запускается, по моему предположению, второй файл без параметров.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Разбор "строки запуска".

Сообщение arvitaly » 30.04.2009 (Чт) 11:11

viewtopic.php?f=1&t=39433&start=0#p6720122
jangle писал(а):
awl100Alex писал(а):alibek
Если "C:\d 1\f 1.exe check d 2\f 2.exe retry /no" - это полный бред


А вот и не бред, эту строка может быть нормально разобрана парсером, справа - налево разумеется


Для тех кто в танке и кому требуются мегаособые объяснения объясните мне (дураку) в чем там джунгли прав? Я конечно понимаю, что потом он тихо съехал в другую сторону, но я за правду, а не за ересиархов, которые не въехав в чем дело пишут, а потом копируют предыдущих 7 топиков.

P.S. Именно с этого дибильного топика началась "флудильня"

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 30.04.2009 (Чт) 11:48

arvitaly писал(а):Для тех кто в танке и кому требуются мегаособые объяснения объясните мне (дураку) в чем там джунгли прав? Я конечно понимаю, что потом он тихо съехал в другую сторону, но я за правду, а не за ересиархов, которые не въехав в чем дело пишут, а потом копируют предыдущих 7 топиков.

P.S. Именно с этого дибильного топика началась "флудильня"


Во-первых мой ник, не джунгли, хватит его коверкать. Во-вторых я предложил правильный метод решения на основе конечного автомата ДКА (надеюсь ты понимаешь, что это такое) при разборе слева - направо. Такие алгоритмы, используются практически во всех синтаксических анализаторах.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Разбор "строки запуска".

Сообщение arvitaly » 30.04.2009 (Чт) 11:51

Что то не вижу комментариев по поводу предыдущего сообщения.
Но мастер-ересиарх я восхищен вами, ввести в заблуждение такое количество людей!!! Ни за что не добавлю в игнор-лист, буду учиться (вдруг пригодится на... обмануть все аудиторию. Не организуете курсы или книгу мб "Как обмануть всех и даже самому себя считать честным?"

P.S.
на основе конечного автомата ДКА
- мегаумно лексически построенное предложение -
масла сливочного намазанного масла сливочного

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 30.04.2009 (Чт) 11:54

arvitaly - хватит флудить. Ни одного сообщения по теме топика не написал. Только флуд провоцируешь заставляя отвечать тебе.

мегаумно лексически построенное предложение -


Да в школе этого не изучают, поэтому видимо "мегаумно"... Это уже универститетский уровень.
Конечный автомат
Последний раз редактировалось jangle 30.04.2009 (Чт) 11:57, всего редактировалось 1 раз.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Разбор "строки запуска".

Сообщение arvitaly » 30.04.2009 (Чт) 11:57

Просто я жду ответа на сообщение viewtopic.php?f=1&t=39433&start=0#p6720122, но ты то прекрасно знаешь, что ответить на него ты не сможешь, как бы не старался прикрыться ДКА, ХКА, МКА

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Разбор "строки запуска".

Сообщение jangle » 30.04.2009 (Чт) 12:11

arvitaly писал(а):Просто я жду ответа на сообщение viewtopic.php?f=1&t=39433&start=0#p6720122, но ты то прекрасно знаешь, что ответить на него ты не сможешь, как бы не старался прикрыться ДКА, ХКА, МКА


Ответы уже все даны, просто надо понимать, что собственно тебе ответили. Однако для человека, у которого нулевые знания в программировании и теории алгоритмов, это сложно, точнее просто невозможно. Поэтому ты и пишешь такие фразы:

Для тех кто в танке и кому требуются мегаособые объяснения объясните мне (дураку) в чем там джунгли прав?

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Разбор "строки запуска".

Сообщение arvitaly » 30.04.2009 (Чт) 12:16

Хорошо, Лис-Ересиарх, продемонстрируйте ваши знания на примере объяснения Необыкновенного Факта (попрошу просто ответить без увиливаний):

viewtopic.php?f=1&t=39433&start=0#p6720122
jangle
А вот и не бред, эту строка может быть нормально разобрана парсером, справа - налево разумеется


viewtopic.php?f=1&t=39433&start=0#p6720131
jangle
А чего глядеть, слева направо читаем строчку в буфер посимвольно, после каждого прочитанного символа проверяем exe на существование, когда вернет ТРУ значит полный путь к экзешнику в буфере.

тупое описание кода GDK данного 5 топиками выше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Разбор "строки запуска".

Сообщение alibek » 30.04.2009 (Чт) 12:18

Тема себя исчерпала.
Поскольку автор уже получил ответ, закрываю.
Lasciate ogni speranza, voi ch'entrate.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 44

    TopList