![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Ergoz |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
Приветствую пользователей винграда. Возникла проблема, и вопрос.
Требуется запустить bin файл (на пример ergoz.bin) который в принципе является ехешником, но быть бином ему необходимо. И есть батник, в котором прописана команда:
Как можно заметить при запуске есть дополнительные параметры запуска, а именно:
и
Я смотрел функции ShellExecute и прочие, но не понял как передавать вышеприведённые параметры айпишника и -ng, а инфы такой нету к сожалению, да и запуск файла bin не знаю как реализовать. Подскажите, пожалуйста, как и что? Был бы особо благодарен за пример. |
||||||
|
|||||||
Ergoz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
не ужто никто не знает? очень прошу, помогите
|
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
Для запуска все-таки придется хотя бы временно изменить расширение на исполняемое. А параметры в ShellExecute передаются, читайте спецификацию функции.
|
|||
|
||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Вовсе не обязательно. Пример: скомпилировать проект, изменить расширение с exe на bin. После этого скомпилировать еще раз, запустить экзешник и нажать на кнопочку. Будет счастье в виде 2-х процессов с одинаковым именем и расширениями exe и bin.
P.S. вообще-то нужна еще обработка того, запустился процесс или нет... но лень ![]() Добавлено через 1 минуту и 22 секунды ShellExecute не запустит, afaik, bin-файл. Выдаст стандартный запрос "а чем бы открыть этот тип файлов?" |
||||
|
|||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
kami, шикарно, про такой запуск (неисполняемых файлов как процесса) не знал - спасибо
![]() |
|||
|
||||
Ergoz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
я наверное совсем туп, но никак не получается реализовать именно запуск. Можно конечно сделать так (набросок):
но к сожалению это не совсем то что мне нужно, а нужно именно напрямую без левого файла. То что приведено kami я честно пытался под себя сделать но вообще не получилось. Ту kami, если не трудно, можешь показать конкретный пример запуска с вышеуказанными параметрами вышеуказанного файла в папке. Заранее спасибо! |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
2 kami - кавычки забыл. И первый параметр не можно, а сильно желательно указывать ;)
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Точно ![]() когда я его указывал, Delphi-приложение отказывалось понимать параметры командной строки. (код тот же, только в CreateProcess указывались отдельно файл приложения и параметр соответственно). ![]()
Не буду. Поменять 1 строку в приведенном мной коде... для этого не нужно два верхних образования. Без обид.. Код в студию. Будем посмотреть, что там не получается. Добавлено через 5 минут и 1 секунду
{$IFDEF offtopic} "в соответствии с вышеизложенным ранее поименованным должностным лицам исполнить нижеуказанное" ![]() ![]() {$ENDIF} |
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Вероятно при этом забывали указывать его в командной строке. Если указывается первый параметр, то приложение должно быть указано дважды: первый раз в первом параметре, второй раз - в командной строке (второй параметр). Логика такая: командная строчка (второй параметр) передаётся программе "как есть". Программа может парсить командную строчку, как ей будет угодно. Соответственно, если в командной строке вы не укажете саму программу, а только её параметры, то сама программа в них запутается: она примет первый параметр за своё имя (нет, ParamStr(0) в Delphi вызывает GetModuleFileName, но другие могут), а второй параметр (если он есть) - за первый. Имя же программы для запуска загрузчиком ОС берётся из первого параметра, если он задан. Или пытается извлечься из второго, если нет. Вот это "пытается извлечься" и есть причина, почему всегда рекомендуется указывать первый параметр: CreateProcess(PChar(Application), PChar('"' + Application + '" ' + Params), ...) Так ошибок не будет никогда. А если вы его не укажете - у вашей программы могут быть серьёзные проблемы с безопасностью. Особенно, если вы не используете кавычки. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
CodeMonkey, понял. Не знал о дублировании параметров, возьму на заметку. Спасибо
![]() |
|||
|
||||
Ergoz |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
Хорошо, на примере кода покажу чего я не совсем понял. Я не спорю что вообще нужно образование чтоб поправить 1 строчку, просто я когда попробовал исправить её у меня не происходило вообще ничего. Итак, вот первая версия кода которую я пробовал:
на такой код программа по нажатию кнопки никак не реагировала, и не производила никаких действий. Вот на такой код:
и на такой:
программа запускается (как я понимаю благодаря появлению 1 параметра с адресом запускаемой программы), но она запускается не совсем правильно, и никак не пойму в чём дело. Суть в том что если через батник запускаю такого вида:
то приложение, как и должно, запускается не в полном экране и без ошибок каких либо. Но если запускаю вручную в командной строке так:
то запускается в полном экране, игнорируя все начальные конфиги программы которую запускаю, + ошибка загрузки шрифтов, т.е. неправильно (из моей программы с такими же проблемами запускается). Я никак не могу ещё понять почему так, даже когда вручную в цмд пишу запуск. бьюсь уже над этой проблемой несколько часов и никак не соображу в чём дело... |
||||||||||
|
|||||||||||
Ergoz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
странно, но если в командной строке набрать
C:\main>game\ergoz.bin -ip:127.0.0.1 то всё нормально. видимо стоит там проверка на то, откуда запускается требуемый бин, фиг знает. Но суть в том что всё заработало. спасибо всем огромное за помощь, именно эта конструкция пашет без проблем:
ещё раз огромное спасибо!!! п.с. так и не понял зачем тут нужна была эта вещь ChangeFileExt(ParamStr(0), '.bin'), т.к. без неё всё норм запустилось ![]() Это сообщение отредактировал(а) Ergoz - 13.7.2009, 22:33 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Нажать F1 на ChangeFileExt религия не позволяет? ![]() Я же приводил пример для того же приложения, у которого в качестве расширения был указан не exe а bin Это сообщение отредактировал(а) kami - 13.7.2009, 22:42 |
|||
|
||||
CodeMonkey |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
должно помочь в поиске причины "не хачу". Добавлено через 5 минут и 10 секунд 2 Ergoz: с логикой у вас серьёзные проблемы. Попробуйте объяснить самому себе:
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
Ergoz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 3.6.2009 Где: Россия Репутация: нет Всего: нет |
да не, там то всё норм)) это я когда тут на форуме выкладывал использовал вторую версию своей проги и решил поправить под остальную часть, и забыл первую часть исправить. Я просто делал несколько видов ланчеров для игры АЙОН. И у одного запуск у меня через мейн (у меня там специальный клиент) а второй через бин )) поэтому тут косяк только на форуме)) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |