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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

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

Сообщение arvitaly » 29.04.2009 (Ср) 11:36

Поробуй сначала немного подумать, почему запуститься именно f.exe
Если не получится - поможем.


Ну так выдели и напиши, что получилось.
Гарантирую, что ты ошибешься.


Ты покажи своим парсером справа налево почему запустится f.exe умный, пока только ересь, код в студио, пожалуйста

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

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

Сообщение jangle » 29.04.2009 (Ср) 11:58

Я вижу, что некоторым надо доказывать, что 2+2=4.
Вот пример в консоли, как раз с плохим путем \1.exe check d\f 2.exe f 1.exe
где f 1.exe параметр для f 2.exe и лежит с ним в одной папке.
Запускаем start.bat и смотрим результат.
Вложения
command.zip
(8.77 Кб) Скачиваний: 94

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 12:08

D:\command>comd.exe 1.exe check d\f 2.exe f 1.exe

Путь к EXE: D:\command\1.exe check d\f 2.exe

Вот что выдала твоя программа, и где же comd.exe?

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

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

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

arvitaly писал(а):D:\command>comd.exe 1.exe check d\f 2.exe f 1.exe

Путь к EXE: D:\command\1.exe check d\f 2.exe

Вот что выдала твоя программа, и где же comd.exe?


Ты тему топика внимательно прочитал? Какой еще comd.exe?

Итак, вопрос. Каким образом можно из предложенной командной строки выделить собственно lpFile и lpParameters?

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

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

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

Мы вроде про твою прогу разговаривали
и какой у тебя lpFile и lpParameters?

У тебя запускается "comd.exe" а пишется Путь к EXE:
D:\command\1.exe check d\f 2.exe
Могу понять где тут lpFile (хотя и неправильно определился), но где тут lpParameters не найду
Где логика, где смысл...

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

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

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

arvitaly - иногда полезно думать, прежде чем что-то написать. Ты думать или не хочешь, или не можешь.

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

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

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

Ну вы и развели...
Правильный ответ-то, в принципе, уже ANDLL дал. Второй пост в ветке..

А для меня это было важно по одной причине. Есть в автозагрузке путь такого вида
"C:\Program Files\Download Master\dmaster.exe -autorun"

Поскольку я забираю её оттуда и отдаю своему "менеджеру автозагрузки", мне нужно было разобрать, что тут имя файла, что тут путь к файлу, а что тут параметры. См. первый пост.

Правда, потом я решил, что раз уж программа в автозагрузке - рабочая папка ей не требуется. В итоге забил на разбор, и оставил обычный Shell.
А нормальным разбором будет как раз разбивка по пробелам и проверка существования файла/папки справа на лево.
label:
cli
jmp label

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 12:38

arvitaly - иногда полезно думать, прежде чем что-то написать. Ты думать или не хочешь, или не можешь.


Отлично отмазался Ересиарх, Ваше Величество Вы мне надоели, позвольте откланяться, купайтесь дальше в Вашей Ереси

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

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

Сообщение Amed » 29.04.2009 (Ср) 12:41

iGrok, зачем тебе нужен такой анализ? Что ты хочешь получать на выходе?
Осознанное действие в результате выполнения указанного приложения с указанными параметрами проделать не получится без дополнительных данных о приложении, ибо строка запуска в общем случае может интерпретироваться неоднозначно.

Если строка запуска "c:\f.exe g.exe", и есть приложения, обозванные "f.exe" и "f.exe g.exe", то оба варианта парсинга будут правильными, вернее допустимыми.
Но вопрос стоит, как я вижу, не "допустима ли такая конструкция?", а "какой вариант правильный?". А ответа на него в общем случае быть не может.

---

UPD
С учетом конкретной задачи могу только порекомендовать разбирать возможные варианты строки запуска, при нахождении неоднозначности кричать об этом благим матом пользователю (предлагать исправить строку, добавив в нужное место кавычки).

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

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

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

arvitaly писал(а):Отлично отмазался Ересиарх, Ваше Величество Вы мне надоели, позвольте откланяться, купайтесь дальше в Вашей Ереси


Думаю, наконец ты осознал всю абсурдность своих вопросов :mrgreen:
В задаче требовалось найти папку и имя файла в переданной ей строке, с какого перепоя там должна оказаться имя самой программы - непонятно :)

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

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

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

Amed писал(а):Если строка запуска "c:\f.exe g.exe", и есть приложения, обозванные "f.exe" и "f.exe g.exe", то оба варианта парсинга будут правильными, вернее допустимыми.
Но вопрос стоит, как я вижу, не "допустима ли такая конструкция?", а "какой вариант правильный?". А ответа на него в общем случае быть не может.


Нет результат всегда будет один. f.exe - программа, g.exe - параметр.
Потому, что парсинг делается слева-направо.

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 12:52

Цитирую, что было нужно
мне нужно было разобрать, что тут имя файла, что тут путь к файлу, а что тут параметры.

И нигде не было сказано, что в параметрах обязательно имя файла, зато было сказано, что имя файла (путь и exe) может содержать любые знаки, и именно его определить являлось (является) трудностью, так как после определения полного пути к файлу определить параметры легко (оставшаяся правая часть).
Твоя программа совершенно не решала данную задачу, так как вся "сложная" часть у тебя ушла в параметры, тогда как необходимо было сделать "сложным" именно путь к файлу. Соответственно, твоя программа в данном сабже - ересь.

ADD:

Нет результат всегда будет один. f.exe - программа, g.exe - параметр.


Результат ТВОЕЙ программы будет один, но любая другая может и обратить внимание на файл "f.exe g.exe" также существующий в этой директории

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

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

Сообщение jangle » 29.04.2009 (Ср) 13:03

arvitaly писал(а):Цитирую, что было нужно
мне нужно было разобрать, что тут имя файла, что тут путь к файлу, а что тут параметры.

И нигде не было сказано, что в параметрах обязательно имя файла, зато было сказано, что имя файла (путь и exe) может содержать любые знаки, и именно его определить являлось (является) трудностью,


Чушь. Имя файла или путь не может содержать любые знаки. Для примера попробуй создать файл ??<>.exe

Твоя программа совершенно не решала данную задачу, так как вся "сложная" часть у тебя ушла в параметры, тогда как необходимо было сделать "сложным" именно путь к файлу. Соответственно, твоя программа в данном сабже - ересь.


В моей программе приводится пример универсального парсинга, пример ты уже видел. Если ты не способен понять исходник из 10 строчек, то тебе надо еще долго учиться, а не читать морали с пафосом заумного школьника. :wink:

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

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

Сообщение iGrok » 29.04.2009 (Ср) 13:10

Amed писал(а):UPD
С учетом конкретной задачи могу только порекомендовать разбирать возможные варианты строки запуска, при нахождении неоднозначности кричать об этом благим матом пользователю (предлагать исправить строку, добавив в нужное место кавычки).

Ну я для начала хочу попробовать сделать анализ, аналогичный тому, что делает эксплорер.
А потом в любом случае я при добавлении даю юзеру возможность проверить и исправить строку.
label:
cli
jmp label

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 13:11

Чушь. Имя файла или путь не может содержать любые знаки. Для примера попробуй создать файл ??<>.exe


Мдаа, кто здесь о любых знаках говорил? Был конкретный пример, я привел также свой f.exe g.exe

В моей программе приводится пример универсального парсинга, пример ты уже видел. Если ты не способен понять исходник из 10 строчек, то тебе надо еще долго учиться, а не читать морали с пафосом заумного школьника. :wink:


Нафига мне твоя тупая программа на отстойнешем языке я ее даже не открывал я смотрел результат, твой универсальный парсер работает только для условий, которые задал ты.

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

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

Сообщение jangle » 29.04.2009 (Ср) 13:29

arvitaly писал(а):Нафига мне твоя тупая программа на отстойнешем языке я ее даже не открывал я смотрел результат, твой универсальный парсер работает только для условий, которые задал ты.


Почитай эту замечательную статью. Как раз про тебя. В остальном вопрос исчерпан.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

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

Сообщение ANDLL » 29.04.2009 (Ср) 13:32

Чето мне перестает нравится тенденция.
Забаньте чтоле 100Alex и жунгла. Сложно вести дискусию, параллельно разгребая кучи мусора
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

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

Сообщение Amed » 29.04.2009 (Ср) 13:37

Значит, так.

1) Проводник не дает создать ярлык без кавычек, если есть несколько вариантов запуска, но ни один из них не содержит параметров.
Создание ярлыка C:\f.exe g.exe (без кавычек) создает ярлык "C:\f.exe g.exe" (с кавычками).

Это значит, что explorer думает за нас - и в автозагрузку попадет второй вариант.

2) Проводник дает создать ярлык вида С:\f.exe g.exe -k test, но ярлык ведет к запуску "f.exe", а все остальное относится к параметрам. Парсинг действительно слева направо.

Похоже, что строка при запуске ярлыка действительно парсится слева направо, но перед созданием ярлыка строка дополнительно модифицируется. То есть запуск ярлыка может интерпретироваться двояко в теории, но на практике он всегда парсится одинаково - слева направо. В этой части jangle прав.

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

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

Сообщение jangle » 29.04.2009 (Ср) 13:38

ANDLL писал(а):Чето мне перестает нравится тенденция.
Забаньте чтоле 100Alex и жунгла. Сложно вести дискусию, параллельно разгребая кучи мусора


А вот флудить в тематическом разделе нехорошо, тем более что дисскусия уже закончилась, и правильные решения были озвучены.

P.S. И мой ник - Джангл (в русской транскрипции)

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 13:43

То есть запуск ярлыка может интерпретироваться двояко в теории, но на практике он всегда парсится одинаково - слева направо. В этой части jangle прав.То есть запуск ярлыка может интерпретироваться двояко в теории, но на практике он всегда парсится одинаково - слева направо. В этой части jangle прав.


Amed, перед тем как что-нибудь написать читай, пожалуйста, предыдущие топики а не только последние.

Цитирую свой ответ

По сути GDK дал пример как это работает именно в виндус

Но
Если в папке есть 2 файла
f.exe
f.exe g.exe (а такое наименование в Windows ессно возможно),
то 2 файл винда не видит в упор

Но речь шла не только о том, как работает Windows, а обо всех вероятных интерпретациях имени файла и параметров.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

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

Сообщение Amed » 29.04.2009 (Ср) 13:48

Я помню твой ответ, уже не раз перечитал.

Зачем нужны все возможные интерпретации, если запускаться будет всегда одна?

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

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

Сообщение iGrok » 29.04.2009 (Ср) 13:57

arvitaly:
Мне, наверное, лучше знать, о чём я спрашивал.
Так вот, ваша с jangle дискуссия к теме моего вопроса ВООБЩЕ НИКАК не относится.

Amed:
Странно. А почему я тогда видел вот такое поведение?
iGrok писал(а):...Причём, походу, разбирается строка "с конца к началу". Т.е.:

В папке [d:\test] есть папка [main.exe -test main.exe] и файл main.exe
Строка "d:\test\main.exe -test main.exe" в проводнике или "Выполнить" открывает папку, а в cmd.exe запускает файл.
...
label:
cli
jmp label

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

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

Сообщение arvitaly » 29.04.2009 (Ср) 13:59

Зачем нужны все возможные интерпретации, если запускаться будет всегда одна?


Где именно запускаться, в Windows? Да, с этим никто и не спорил. В общем-то спор сводился к тому - делать как Windows, либо делать более глубокую проверку и решили (первым Alibek), что по-другому не получится - будет неоднозначность. Все, что было после - Джунгля решил пофлудить, а я не могу пройти мимо ереси))

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

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

Сообщение Amed » 29.04.2009 (Ср) 14:07

Строка адреса в Проводнике не понимает у меня параметры запуска приложения.
Попытка запуска "c:\test\main.exe -test" говорит "не удается найти", то есть похоже, что через проводник принципиально нельзя запустить с параметрами, поэтому он и использует такой вариант. Или я ошибаюсь?

И, во-вторых, ярлык с путём запуска "c:\test\main.exe -test main.exe" принудительно добавляет в себя кавычки в начало и конец.

Тебя же практически интересует только парсинг содержимого ярлыков? А запуск через ярлык происходит однообразно, как бы там не вели себя explorer и cmd.exe.

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

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

Сообщение iGrok » 29.04.2009 (Ср) 14:08

arvitaly писал(а):Все, что было после - Джунгля решил пофлудить, а я не могу пройти мимо ереси))

Какая разница, кто первый начал? Что за детсад?
Не можешь пройти мимо ереси - сделай как SLIM. Добавь jangle в список недругов и не будешь видеть его постов. Делов-то...
Ну или спорьте в личке.

Amed писал(а):...Тебя же практически интересует только парсинг содержимого ярлыков? А запуск через ярлык происходит однообразно, как бы там не вели себя explorer и cmd.exe.

На самом деле практически меня интересовал единообразный способ запуска содержимого ярлыков, и секций автозапуска реестра.
Потому что сейчас у меня единственная мысль - ярлыки - через ShellExecute, а реестр - через Shell.
label:
cli
jmp label

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

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

Сообщение Amed » 29.04.2009 (Ср) 14:20

iGrok писал(а):На самом деле практически меня интересовал единообразный способ запуска содержимого ярлыков, и секций автозапуска реестра.
Потому что сейчас у меня единственная мысль - ярлыки - через ShellExecute, а реестр - через Shell.


Ну и правильно. Алибек уже давно сказал:
alibek писал(а):Если в имени файла/каталога есть пробел, значит его надо заключать в двойные кавычки. С учетом этого никакой неоднозначности никогда не возникает, в парсере должно быть лишь два правила:
1) Если имя файла начинается с кавычки, то заканчивается оно парной кавычкой.
2) Иначе имя файла оканчивается на пробеле.

Ну а парные кавычки за нас уже расставил в строке запуска ярлыка explorer. Кажется, мы наконец это выяснили.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

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

Сообщение awl100Alex » 29.04.2009 (Ср) 14:58

arvitaly писал(а):Мдаа, кто здесь о любых знаках говорил?

awl100Alex писал(а):в качестве разделителя параметров - любой символ клавиатуры!

Повторил специально для тебя, инквизитор! :)

iGrok писал(а):...Вспоминаем о том, что есть ShellExecute... Каким образом можно из предложенной командной строки выделить собственно lpFile и lpParameters?
...
За каким мне фигом WinExec, если с тем же успехом я могу юзать Shell
...
я отдельно попросил не путать этот вопрос с парсингом "командной строки"
...
мне нужно было разобрать, что тут имя файла, что тут путь к файлу, а что тут параметры.
...
Правда, потом я решил, что раз уж программа в автозагрузке - рабочая папка ей не требуется. В итоге забил на разбор, и оставил обычный Shell.
...
Ну я для начала хочу попробовать сделать анализ, аналогичный тому, что делает эксплорер.
...
На самом деле практически меня интересовал единообразный способ запуска содержимого ярлыков, и секций автозапуска реестра.
...
сейчас у меня единственная мысль - ярлыки - через ShellExecute, а реестр - через Shell.

Как и говорилось: автор сам не знает, что ему было нужно в конечном итоге.

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

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

Сообщение jangle » 29.04.2009 (Ср) 15:20

Amed писал(а):Проводник дает создать ярлык вида С:\f.exe g.exe -k test, но ярлык ведет к запуску "f.exe", а все остальное относится к параметрам. Парсинг действительно слева направо.

Похоже, что строка при запуске ярлыка действительно парсится слева направо, но перед созданием ярлыка строка дополнительно модифицируется. То есть запуск ярлыка может интерпретироваться двояко в теории, но на практике он всегда парсится одинаково - слева направо. В этой части jangle прав.


Cлава богу, хоть кто-то понял! :)

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

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

Сообщение iGrok » 29.04.2009 (Ср) 17:25

awl100Alex писал(а):Как и говорилось: автор сам не знает, что ему было нужно в конечном итоге.

Я уже столько раз сказал, что мне нужно, что повторяться уже тошно. В этой флудильне делные мысли высказали только ANDLL, alibek и Amed. Все остальные не врубившись в тему вопроса несут какую-то ахинею..

Для тех, кто в танке, поясню всё-таки ещё раз, что проблемы с тем, чтобы разобрать где имя файла, а где параметры в правильно составленной строке (с кавычками) никогда не стояло. Стояла проблема понять каким макаром винда будет парсить такую строку: "d:\test\main.exe -test main.exe".

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

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

За сим дискуссию считаю завершённой. Огромное спасибо господам флудерастам за разбавление нашей сухой беседы, и ANDLL за единственную дельную подсказку.
label:
cli
jmp label

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

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

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

Эх, пофлужу...

iGrok писал(а):В этой флудильне делные мысли высказали только ANDLL, alibek и Amed. Все остальные не врубившись в тему вопроса несут какую-то ахинею.

Ага... но прав-то был-таки jangle :D
jangle писал(а):А чего глядеть, слева направо читаем строчку в буфер посимвольно, после каждого прочитанного символа проверяем exe на существование, когда вернет ТРУ значит полный путь к экзешнику в буфере.
Артур
 
   

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52

    TopList