Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2012, 08:31   #1
Zubastic
 
Регистрация: 25.08.2012
Сообщений: 5
По умолчанию ShellExecute и запуск программы

Собственно пишу некий проект связанный с запуском программ. В частности есть программа и апдейтер к ней. Все работает кроме такой вещи.
Код:
  ShellExecute(Handle,'open', pchar(paths+'Parser.exe'), nil, nil, SW_SHOWNORMAL);
Если запускать отдельно в новом проекте, то все хорошо. Однако при запуске из самой программы ничего не происходит, хотя должна стартовать новая программа. Любые другие папки/файлы открываются. Но мой проект не хочет... В ответ возвращается код 42.
Сравнил с старыми исходниками: если файл меньше 1 мб, то он запускается. Иначе нет. (В исполняемом файле висят картинки).
Не могу понять, в чем дело. Отличие лишь в том, что в программе появилось несколько форм. Но она даже не открывается.

Последний раз редактировалось Zubastic; 25.08.2012 в 09:45.
Zubastic вне форума Ответить с цитированием
Старый 25.08.2012, 09:29   #2
Zubastic
 
Регистрация: 25.08.2012
Сообщений: 5
По умолчанию

Пробовал и WinExec - не работает почему-то.

Последний раз редактировалось Zubastic; 25.08.2012 в 09:46.
Zubastic вне форума Ответить с цитированием
Старый 25.08.2012, 10:25   #3
Zubastic
 
Регистрация: 25.08.2012
Сообщений: 5
По умолчанию

Все оказалось проще, хотя не явно:
Код:
 CreateMutex(nil,false,'[9A86AFFF-9AD6-4935-8FB5-D0D37F769647}]');
 k:=GetLastError();
 if (k=ERROR_ALREADY_EXISTS)or(k=ERROR_ACCESS_DENIED) then
 begin
  wnd:=FindWindow('TForm1',nil);
  if wnd<>0 then
  SetForegroundWindow(wnd);
  Application.Terminate;
  Exit;
 end;
Имена мутексов были одинаковы у программ (тк копировал, не думая) в итоге программа не хотела запускаться, когда был ее аналог.
Zubastic вне форума Ответить с цитированием
Старый 25.08.2012, 21:00   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Считаю, что пора Вам начинать смотреть на WinAPI.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Примеров использования в инетах масса.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 26.08.2012, 03:48   #5
Zubastic
 
Регистрация: 25.08.2012
Сообщений: 5
По умолчанию

А толку? Если ShellExecute и делает CreateProcess.
Zubastic вне форума Ответить с цитированием
Старый 26.08.2012, 07:16   #6
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

В стэке вызовов меньше места тратится, к примеру.
Если код делает одно и то же, то зачем нить гонять по разным функциям-представлениям, если можно использовать сразу нативный код?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 26.08.2012, 10:47   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

CreateProcess более гибкий.
а у ShellExecute в первую очередь хорош для открытия файлов.
Цитата:
если можно использовать сразу нативный код?
там итак нативный код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 26.08.2012 в 10:50.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.08.2012, 12:16   #8
Zubastic
 
Регистрация: 25.08.2012
Сообщений: 5
По умолчанию

Просто функция проще по вызову и передаче параметров, насколько я знаю в CreateProcess нужно указывать память.
Zubastic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ShellExecute и запуск игр Anton) Win Api 12 14.10.2011 18:21
Запуск программы... Наталия 555 Помощь студентам 3 16.06.2011 20:27
запуск программы из под другой программы fomikadze Общие вопросы C/C++ 8 13.06.2011 14:47
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Запуск программы Egych Общие вопросы Delphi 4 04.05.2007 09:46