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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2008, 13:13   #1
Manitu
Пользователь
 
Аватар для Manitu
 
Регистрация: 05.03.2008
Сообщений: 33
Стрелка запуск exe

необходимо запустить программно другой exe-файл. ShellExecute не подходит, там прописывается абсолютный путь (или я чего то не знаю?), а мне это не подходит, мне нужно чтобы был допустим относительный путь. Какие еще есть функции для запуска файлов, и как ими пользоваться?
заранее пасиба
Manitu вне форума Ответить с цитированием
Старый 01.05.2008, 17:58   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Зная абсолютный адрес запущенной программы можно вычислить относительный.
Код:
путь := ExtractFilePath(Application.ExeName) //папка запуска
Ещё один способ (старый)
Код:
WinExec(путь, sw_ShowNormal);
eoln вне форума Ответить с цитированием
Старый 01.05.2008, 18:46   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

WinExec нетак универсален, некоторые файлы, программы запускает некорректно. Используйте ShellExecute или CreateProcess, возможностей больше.
Alter вне форума Ответить с цитированием
Старый 01.05.2008, 19:08   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а посмотрть справку по shellexecute

HINSTANCE ShellExecute(

HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);

один из параметров как раз и есть папка для задания рабочей (относительно которой будут определяться пути)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.05.2008 в 19:10.
evg_m вне форума Ответить с цитированием
Старый 01.05.2008, 19:48   #5
Manitu
Пользователь
 
Аватар для Manitu
 
Регистрация: 05.03.2008
Сообщений: 33
По умолчанию

неее... тема тут немного другая... абсолютный путь НЕИЗВЕСТЕН...
вот страницы в программе у меня адреса к ним прописаны начиная с той папки, в которой лежит сам экзешник, и независимо от того где лежит эта папка, мы сможем запустить программу и все будет работать. Можно эту папку перенести в любое место, на другой компьютер - и все будет работать.
в том то и дело, что абсолютный путь - слишком легко меняется.
как сделать, чтобы отталкивался адрес к екзешнику, который должен запуститься из приложения, от того места, где запущенное приложение??
Manitu вне форума Ответить с цитированием
Старый 01.05.2008, 20:07   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
путь := ExtractFilePath(Application.ExeName); //папка запуска
путь := путь + '\' + путь_с_той_папки_в_которой_лежит_сам_экзешник + имя_запускаемого_файла;

Последний раз редактировалось eoln; 01.05.2008 в 20:09.
eoln вне форума Ответить с цитированием
Старый 01.05.2008, 20:14   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Manitu Посмотреть сообщение
как сделать, чтобы отталкивался адрес к екзешнику, который должен запуститься из приложения, от того места, где запущенное приложение??
Указывайте относительный путь от текущего каталога, скажем, '.\MyDirectory\MyApp.exe'. И пользуйтесь CreateProcess. ShellExecute предназначена в первую очередь для запуска файлов по ассоциациям, элементов меню, виртуальных папок, вроде "Мои документы".
B_N вне форума Ответить с цитированием
Старый 02.05.2008, 12:09   #8
Manitu
Пользователь
 
Аватар для Manitu
 
Регистрация: 05.03.2008
Сообщений: 33
По умолчанию

Хм, пасиба канешно..
А можете еще пожалуста объяснить, что в этом CreateProcess указывать в параметрах, кроме адреса к файлу?..
Не могу найти...
Manitu вне форума Ответить с цитированием
Старый 02.05.2008, 18:14   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

B_N, а можно я задам свой вопрос в чужой теме?...
меня всегда интересовало и вот, вроде представился шанс уточнить.
Цитата:
Указывайте относительный путь от текущего каталога, скажем, '.\MyDirectory\MyApp.exe'.
подскажите, а чем запись от текущего каталога '.\MyDir\'
отличается от записи 'MyDir\' ? Насколько я понимаю, это полностью идентично? Или есть нюансы?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2008, 18:23   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Manitu, вот, если поможет, рабочая программка —пример консольной программы (запаковать файл, вызвав ARJ.exe):
Код:
program TestArj;

USES SYSUTILS, Windows;
{$APPTYPE CONSOLE}

procedure PackFile( sFName, sDestPath : string);
var si:TStartupInfo;
    pi:TProcessInformation;
    cmdline:string;

begin
    ZeroMemory(@si,sizeof(si));
    si.cb:=SizeOf(si);
    cmdline:='C:\UTIL\ARCS\arj.exe a currtest c:\temp\*.htm';
    if not CreateProcess( nil, // No module name (use command line).
        PChar(cmdline),  // Command line.
        nil,             // Process handle not inheritable.
        nil,             // Thread handle not inheritable.
        False,           // Set handle inheritance to FALSE.
        0,               // No creation flags.
        nil,             // Use parent's environment block.
        nil,             // Use parent's starting directory.
        si,              // Pointer to STARTUPINFO structure.
        pi )             // Pointer to PROCESS_INFORMATION structure.
       then
        begin
         WriteLn( 'CreateProcess failed. ('+cmdline+')' );
         Exit;
        end;
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
//    WriteLn('Done !');
end;
begin
  ...
  PackFile('',''); 
  ...
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск *.exe из программы Djaconda Паскаль, Turbo Pascal, PascalABC.NET 22 01.03.2012 00:27
Запуск ехе Killbrum Помощь студентам 8 19.08.2008 18:06
Копирование и запуск RealSHELS Общие вопросы Delphi 2 27.03.2008 22:03
запуск програмы ZhekON Общие вопросы Delphi 11 05.06.2007 16:05
запуск kalin Общие вопросы Delphi 8 02.03.2007 05:27