173 / 121 / 48
Регистрация: 30.11.2012
Сообщений: 1,318
1

Обмануть 1 параметр

27.02.2015, 10:29. Показов 519. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Столкнулся с нестандартной проблемой.
Написал программу test.exe, которая должна запускать другую программу с 1 параметром, закинул её в папку с той программой которую она должна запускать, в ней выполняю такой код:
C++
1
Process::Start("prog1.exe", "1");
Запускается программа "prog1.exe", в корневом каталоге так же лежит программа "prog2.exe", которая судя по всему подгружается 1 программой. Так вот, все работает замечательно.

Делаем следующее, вытаскиваем test.exe с корневого каталога программы "prog1.exe", кидаем её допустим на рабочий стол и указываем в коде прямой путь до программы которую нужно запускать, получился такой код:
C++
1
Process::Start("D:\\программы\\prog1.exe", "1");
"prog1.exe" запускается, но выдает ошибку, что не может найти "prog2.exe". Кидаем на рабочий стол (там где находится test.exe) программу "prog2.exe", запускает test.exe - все работает.


Отсюда собственно вопрос. Как сделать так, чтобы программа запускалась из внешних папок и подгружала программу "prog2.exe" из корневого каталога запускаемой программы, а не запускающей. Мало спал, не могу сейчас сообразить, но есть мысли по этому поводу..

По идее test.exe передает только 1 параметр, это 1 (единичку), эта единичка отвечает за открытия 1 COM-порта. Создалось ощущение будто "prog1.exe" принимает не 1, а 2 параметра. В качестве первого параметра принимает путь запускающей программы, но тогда становится непонятно, как обмануть "prog1.exe" и в качестве 1 параметра (этого пути) подсунуть ей её же корневой каталог?

Буду признателен за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 10:29
Ответы с готовыми решениями:

Обмануть вычитание
Есть программа,в которую вводишь число b(положительное только) и происходит действие по формуле a-b...

Как обмануть указатель?
Я бы хотел сделать так, чтобы функция my_function могла менять значение value, а alien_function -...

Как обмануть компилятор и "перепрыгнуть через функцию"?
Известно, что адрес возврата из функции сохраняется на стеке. (В данном эксперименте мы отключим...

Обмануть Яндекс
Есть скрипт, посылающий запросы к Яндексу и выводящий результат. Вместо результата постоянно...

5
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,688
27.02.2015, 11:06 2
Придется переписывать код prog1.exe, чтобы она читала не один параметр из командной строки, а два.
1
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
27.02.2015, 11:20 3
Nalik, не особо понял, а что если попробовать подложить в ту же директорию ярлык на prog2.exe который замаплен на фактическое расположение prog2.exe?
1
173 / 121 / 48
Регистрация: 30.11.2012
Сообщений: 1,318
27.02.2015, 11:23  [ТС] 4
Чего я и опасался, так как доступа к коду prog1.exe у меня нету.
Тогда такой "обходной" вопрос. В корневом каталоге с prog1.exe есть bat файл, в котором выполняется команда:
"prog1.exe 1", пытаюсь запустить этот батник кодом:
C++
1
Process::Start("D:\\Программы\\fail.bat");
Он запускает его (видно на секунду появившееся окно консоли) и тут же закрывается, не запуская prog1.exe.
Когда запускаю ручками bat файл, он запускает prog1.exe и остается висеть до закрытия формы prog1.exe

Добавлено через 3 минуты
Ха, когда снова закинул переделанный test.exe в корневую папку с bat файлом (в котором так же prog1.exe), батник запускается нормально и остается висеть до завершения формы.
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
27.02.2015, 11:25 5
Цитата Сообщение от zss Посмотреть сообщение
Придется переписывать код prog1.exe, чтобы она читала не один параметр из командной строки, а два.
Не, зачем, если я правильно понял проблему, то надо при запуске процесса всего лишь задавать соответствующую working directory
1
173 / 121 / 48
Регистрация: 30.11.2012
Сообщений: 1,318
27.02.2015, 11:30  [ТС] 6
Цитата Сообщение от HighPredator Посмотреть сообщение
Nalik, не особо понял, а что если попробовать подложить в ту же директорию ярлык на prog2.exe который замаплен на фактическое расположение prog2.exe?
У меня уже реализовано то что я хочу, просто хотел разобраться, почему не работает в таком случае.
Видимо это особенность "тупокода" программы prog1.exe..

А вообще сделал так:
создал test.exe, создал test1.exe и закинул в корневой каталог с prog1.exe.
test.exe запускает test1.exe которая в свою очередь запускает prog1.exe, просто это не очень удобно.

Всем спасибо за помощь!)

Добавлено через 3 минуты
Не, зачем, если я правильно понял проблему, то надо при запуске процесса всего лишь задавать соответствующую working directory
--
Цитата Сообщение от Voivoid Посмотреть сообщение
Не, зачем, если я правильно понял проблему, то надо при запуске процесса всего лишь задавать соответствующую working directory
Мне нравится ход ваших мыслей, я пришел к такому же выводу, что дело не в параметрах вовсе, а в том что запускающая прога передает каким-то боком директорию в которой находится, а prog1.exe каким-то боком её принимает в своем коде и подгружает файл из этой директории.
0
27.02.2015, 11:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2015, 11:30
Помогаю со студенческими работами здесь

Обмануть админа
Такая вот проблема. Злой наш админ запретил скачивать файлы размером более 10Мб. Если что хочется...

Обмануть голосовалку
Добрый день. Понимаю, конечно, что вопрос мой может быть расценен, изначально, как "с душком",...

Обмануть тестирование
Здравствуйте, задача такая: Имеется база вопросов (около 1000 вопросов), необходимо придумать...

Обмануть проверку
Добрый вечер, помогите обмануть проверку, а именно что поместить в переменную $u, что бы проверка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru