Текущий архив: 2003.10.30;
Скачать: CL | DM;
Вниз
Нестандартный запуск программ из программы Найти похожие ветки
← →
De Kamp (2003-10-13 20:55) [0]Доброго времени суток.
Проблема следующая. Есть перечень моих программ (EXE)(Написаны на Дельфи т.е. в них можно внести изменения). Есть основная программа из которой они должны запускаться.
Как сделать так, чтобы данные программы можно было запустить только через нее а не просто нажав EXEшник?
Заранее благодарен,
С Уважением De Kamp.
← →
Юрий Зотов © (2003-10-13 21:05) [1]Например, просто переменуйте расширение. Ваша программа переименовывает его в EXE, запускает и дожидается завершения (в отдельном потоке), а затем переименовывает обратно.
Достоинство такого способа - простота. Недостаток - если произойдет, например, сбой системы, файл останется с расширением EXE.
← →
Ломброзо © (2003-10-13 21:09) [2]> Например, просто переменуйте расширение.
Имхо это вовсе не обязательно. Не знаю, как CreateProcess и ShellExecute, но WinExec на расширения чихать хотел.
← →
SammIk © (2003-10-13 21:10) [3]Еще способ))
Можешь проксорить весь фаил(или его часть)каким-нибудь
баитом.
Потом перед загрузкои, проксорь снова и запускаи.
Недостаток тот же, тесть если программа оборвется на полпути
(когда ксорить будет) то считаи фаил потерян))
← →
Романов Р.В. © (2003-10-13 21:19) [4]Запускающая и запускаемая программы должны общаться между собой...
← →
Ломброзо © (2003-10-13 21:20) [5]дадад.... только вот почему-то исполняемый файл совсем без расширения запускаться не желает, а с произвольным расширением - загружается.
← →
SammIk © (2003-10-13 21:38) [6]
> Романов Р.В.
Тему говорит))
Создаешь в основном модуле мьютекс,
и если при загрузке второстепенных модулеи они не находят
ентого мьютекса то заканчиваешь работу и спать))
← →
De Kamp (2003-10-14 20:23) [7]Я более за вариант взаимодействия между программами.
Вопрос в том как грамотно организовать передачу этих сведений модулям?
← →
Романов Р.В. © (2003-10-14 22:10) [8]Основная программа создает мьютекс и запускает модуль.
Модуль проверяет существование мьютекса, удаляет его и работает дальше. Если мьютекс не обнаружен модуль завершает работу.
← →
Ломброзо © (2003-10-14 23:57) [9]> De Kamp (14.10.03 20:23) [7]
Авот периодически сюда вывешивают список технологий межпроцессного вз-я, в кои входят манипулирование буфером обмена, сокеты, пайпы, и т.д. и т.п.,
и вот ешё и COM. Превращайте ваши программы в EXE-серверы.
← →
Моджахедос (2003-10-15 01:50) [10]Ну, добавлю и попроще способ. Передавай своим программам в командной строке какой-нибудь параметр.
← →
Моджахедос (2003-10-15 01:51) [11]А сами программы при отстутствии этого параметра завершают работу.
И к чему тут мьютексы ;)
← →
KSergey © (2003-10-15 07:35) [12]Мьютекс подделать сложнее
А параметр - запросто можно указать штатными средствами
К стати, а может эти прогрсммы в виде dll оформить? Или bpl. Да еще sharemem на всю катушку запользовать (чтобы ограничить среду, в которой должен быть написан хост-процесс). Ну можно еще чего - на что фантазии хватит.
← →
han_malign © (2003-10-15 09:10) [13]>А параметр - запросто можно указать штатными средствами
- ну и пускай они 128 байтный ключ руками в командной строке забивают, если такие умные, что его выковыряли из кода - пускай..., умных надо поощрять. (Кстати ключ можно, перед запуском, в EXE и прописать)
← →
KSergey © (2003-10-15 09:25) [14]Руками забивать не обязательно - можно Copy/Paste воспользоваться ;)
Впрочем, тут как уж захочется.
← →
De Kamp (2003-10-16 19:45) [15]Можно примерчик как передать какую либо переменную через сокеты, или СОМ из одной программы в другую?
← →
willys © (2003-10-16 21:18) [16]а можно просто сделать в этих программах экспортируемые функции, в которые и перенести инициализацию. а в стандартной WinMain оставить только заглушку.
← →
De Kamp (2003-10-17 18:58) [17]>willys © (16.10.03 21:18) [16]
Можно по подробней?
← →
Моджахедос (2003-10-17 19:27) [18]1. Я так понял из вопроса, что это "защита от дурака".
См. вопрос.
2. Два варианта (предполагаемых):
а) программа для комп. клуба --> следовательно, утащить сам экзешник (шелл или как там у вас заделано) домой для исследования проблематично.
б) распространяется пакет программ, при этом, по каким-то причинам, запуск всего suit"а должен выполняться только из какой-то основной программы --> следовательно, все в руках у человека, желающего сделать по-своему.
3. Я предположил вариант 2.а. Поэтому: достаточно, не мудрствуя,
передавать коммандную строку, при желании шифруя ее в основной программе.
4. Если, все-таки, имеется в виду вариант 2.б, то совершенно нет никакого смысла прятаться за всякими высокоуровневыми придумками вроде мьютексов, stream"ов, передачей сообщений, ограничениями чисто компиляторскими (передача string при содействии borlndmm.dll) или (еще не обсуждалось) memory mapped files. По той простой причине, что эти вещи -- _высокоуровневые_ и НИКТО НИКОГДА их не будет ломать при случае 2.б. на высоком уровне, а только на низком, где нет различия ни между забавами с коммандной строкой ни "мьютексами".
5. Ю.Зотов предложил более или менее универсальный вариант для 2.а., я предложил равнозначный, но для варианта 2.б следует (а нужно ли) избрать совершенно иной способ.
6. А пока автор вопроса не определил четко задачи, невозможно установить необходимо-достаточный вариант решения. Впрочем при варианте 2.б его и не существует.
← →
De Kamp (2003-10-19 20:06) [19]>Моджахедос (17.10.03 19:27)
Суть такая: все эти отдельно взятые модули являются как бы одной большой программой взаимодействующей между своими частями посредством баз данных. В основной программе есть зашифрованная база данных со списком всех подключенных модулей. В результате конечный пользователь видит единую постоянно дополняемую, за счет подключения новых модулей программу. Таким образом выходит - 2б.
← →
AbrosimovA (2003-10-20 09:29) [20]Ещё вариант: Запихать все ведомые программы в ресурс главной, и при её запуске извлекать эти программы на диск, а после окончания основной - удалять.
Страницы: 1 вся ветка
Текущий архив: 2003.10.30;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.017 c