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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2012, 07:03   #1
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
Подмигивание Ошибка запуска exe-файла

Здравствуйте всем!
Имеется такая проблема... Создал несколько проектов в делфи (тесты), все готовые (т.е. екзешники) и все что необходимо для их работы сложил в папку. Создал еще один проект оболочку учебного пособия, и из него хочу запускать свои же созданные тесты. Прописал через ShellExecute запуск приложения, он запускает, но как только появляется форма запускаемого приложения, выводит ошибку "File not found", я не могу понять в чем дело...
Причем та же самая ошибка выходит и при запуске теста в html...
Если же просто запускаю екзешник теста из папки самостоятельно, то работает все отлично. Помогите разобраться в чем дело.
qwerty55 вне форума Ответить с цитированием
Старый 26.04.2012, 07:56   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Дайте код как запускаете
Dozent вне форума Ответить с цитированием
Старый 26.04.2012, 08:03   #3
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

Код:
ShellExecute(Form1.Handle, nil, PChar(ExtractFilePath
(Application.ExeName)+'\Dannie\Tests\Gogol.exe'), nil, nil, SW_SHOW);
если не получится так, то как хотя бы чтобы открывалась папка с этими тестами, и выделялся нужный файл теста
qwerty55 вне форума Ответить с цитированием
Старый 26.04.2012, 08:09   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
ыводит ошибку "File not found",
Значит не правильн оуказываете пусть! А так вроед вывод правильный.
Цитата:
если не получится так, то как хотя бы чтобы открывалась папка с этими тестами
Есть такой компанент OpenDialog .
Dozent вне форума Ответить с цитированием
Старый 26.04.2012, 08:11   #5
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

подсвечивание файла я сделал (т.е. открывается папка и указанный тест подсвечивается), но там нужно указывать полный путь папки, а мне так не пойдет, т.к. папка может быть перемещена допустим на диск D, и путь уже меняется...

Цитата:
Сообщение от Dozent Посмотреть сообщение
Значит не правильн оуказываете пусть! А так вроед вывод правильный.

Есть такой компанент OpenDialog .
путь я указываю правильный, потому что сам тест запускается (появляется его главная форма, но ничего не работает) и одновременно выходит ошибка "File not found"...

Последний раз редактировалось artemavd; 26.04.2012 в 12:43.
qwerty55 вне форума Ответить с цитированием
Старый 26.04.2012, 09:17   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

ответ уже дан его надо просто понять.

Для определения полного имени при указании неполного используется ТЕКУЩАЯ(рабочая) папка (directory)/
Этому правилу следуют
и shellExcecute ( "Tests/test1.exe")
и загрузка данных в непосредственно в тесте LoadFromFile('test1.txt');

и текущая папка устанавливается
1. при запуске shell и далее не меняется без особых на то причин.
2. при запуске программы из среды.

И это будут РАЗНЫЕ папки!
Код:
С:\diplom\   tests\test1.exe 
C:\diplom\tests\      test1.exe
Код:
С:\diplom\   test1.txt  ----NOT FOUND 
C:\diplom\tests\     test1.txt ---OK

методы лечения.
1. использовать правильное указание рабочей directory при запуске
shellExcecute это позволяет.
2. в тестах использовать динамические абсолютные пути. (без привязки к рабочей папке).
Рабочая не значит та папка где лежит программа!!!

остальное по ссылке вначале.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.04.2012 в 09:43.
evg_m вне форума Ответить с цитированием
Старый 26.04.2012, 09:41   #7
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

в тесте через LoadFromFile сделана загрузка вопросов
Т.е. я так понял что нужно положить папку с тестами в директорию с пособием и тогда можно запукать ( "Tests/test1.exe")?
qwerty55 вне форума Ответить с цитированием
Старый 26.04.2012, 10:27   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

СДАЮСЬ!

Цитата:
1. использовать правильное указание рабочей directory при запуске
shellExcecute это позволяет.
shellExecute с явным указанием рабочей directory (это один из параметров). уж найти какой именно это параметр надеюсь сможете.
Пепел Феникса в другой вашей теме в примере с Opendialog его использовал

Цитата:
2. в тестах использовать динамические абсолютные пути. (без привязки к рабочей папке).
Код:
LoadFromfile( ExtractFilePath(application.exename) +.....);
Я бы рекомендовал второй путь.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.04.2012 в 10:29.
evg_m вне форума Ответить с цитированием
Старый 26.04.2012, 10:41   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ну поймите же, ошибка возникает у вас НЕ ПРИ ЗАПУСКЕ EXE (как Вы наивно думаете!), а ВО ВРЕМЯ РАБОТЫ ЗАПУЩЕННОГО EXE!
разница - "я не могу зажечь газовую плиту" и "когда я зажигаю газовую плиту, пламя зелёное и до потолка" - разницу видите?!
Вы успешно запускаете свой тест. но он работать не может. ибо не может найти нужный ему файл. точка.!

Если не можете или, скорее, не хотите изменить исходный код текста (вашего gogol.exe), так, чтобы он работал корректно вне зависимости от того, откуда этот самый текст запущен (в LoadFormFile нужно использовать ПОЛНЫЙ ПУТЬ: т.е. у Вас .....LoadFromFile('mytest.txt');
а нужно вместо этого написать:
Код:
что-то.LoadFromFile(ExtractFilePath(Application.ExeName)+'\mytest.txt');
ну ладно. допустим. не хотите сделать нормально и надёжно.


Ну тогда в своей программе, где запускаете тест, сделайте ему (тесту) "тепличные, домашние" условия: предварительно папку с тестом сделайте ТЕКУЩЕЙ!!

Цитата:
Код:
procedure ChDir(S: string);

Description

ChDir changes the current directory to the path specified by S. If S includes a drive letter, the current drive is also changed.
вот так, например (в OpenDialog поставьте фильтр на *.EXE) :
Код:
if OpenDialog1.Execute then begin
    sTestFileName := OpenDialog1.FileName;
    sTestHomeDir := ExtractFilePath( sTestFileName );
    ChDir( sTestHomeDir );
    ShellExecute(Form1.Handle, nil, sTestFileName, nil, nil, SW_SHOW);
end;
или так ещё можно попробовать (так Вам Пепел Феникса предлагал):
Код:
if OpenDialog1.Execute then begin
    sTestFileName := OpenDialog1.FileName;
    ShellExecute(Form1.Handle, nil, sTestFileName, nil, PChar(ExtractFilePath(sTestFileName)), SW_SHOW);
end;

добавлено
проглядел я пост от evg_m, иначе свой бы уже и не писал.
Ибо ПОЛНОСТЬЮ с ним согласен!

Последний раз редактировалось Serge_Bliznykov; 26.04.2012 в 10:50.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2012, 11:03   #10
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

Serge_Bliznykov, я все это написал, поставил директорию с тестами, но открывается OpenDialog и после выбора файла OpenDialog закрывается и ничего больше не происходит...
qwerty55 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка запуска exe-файла qwerty55 Помощь студентам 8 26.04.2012 10:24
exe для запуска exe fireballpro100 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 16.04.2012 21:07
Предупреждение построения => ошибка запуска исполняемого файла Лунатик222 Visual C++ 1 09.10.2011 22:58
Ошибка и правельная загрузка иконки exe файла в Delphi TaYgA Помощь студентам 0 30.10.2009 20:51
Ошибка собранного EXE файла AlexeyLed Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 26.01.2009 20:21