Почему при попытке вызвать программу (сделанную самим) находящуюся В ДРУГОЙ ПАПКЕ, возникает ошибка и всплывает окно, в котором говорится что вызываемая программа не может открыть рисунок (любые рисунки, которые грузятся из файлов во время запуска программы), т.к. он не находится на диске.
Пробовал различные методы запуска приложений из своей программы:
Сам автозапуск каталога находится в D:\programs\autorun
1) WinExec ('catalog\catalog.exe', SW_SHOW);
где в папке autorun есть программа (autorun.exe), которая вызывает из папки catalog (папка catalog находится в autorun) программу catalog.exe
2)ExecMyConsole('catalog\catalog.exe');
Прописав предварительно функцию
function ExecMyConsole(Path: PChar):boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
result := false;
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
with StartupInfo do
begin
cb:=SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_HIDE;
end;
{
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. //CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil, // Use parent's environment block.
nil, // Use parent's starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
}
if CreateProcess(nil, Path, nil, nil, false,
CREATE_NEW_CONSOLE or IDLE_PRIORITY_CLASS,
nil, nil, StartupInfo, ProcessInfo) then
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
ExecMyConsole:=true;
end;
end;
3)...нажатие на кнопку...
Var
w1: Word;
p1,p2: array[0..100] of Char;
begin
IF GetModuleHandle(p1)=0 THEN begin
StrPcopy(p2,'catalog\catalog.exe');
w1:=WinExec(p2,SW_Restore);
end;
end;
В любом случае каталог запущенный через программу автозапуска не находит рисунки в папке !!!с автозапуском (получается что его путь составляет /pics/fon.jpg), хотя должен искать в следующей папке - /catalog/pics/fon.jpg).
Рисунки в каталоге загружаются так:
Form1.image1.Picture.LoadFromFile('pics\fon.jpg');
Я решил эту проблему путём того, что и в папке с каталогом и в папке с автозапуском находится по папке с используемыми ТОЛЬКО КАТАЛОГОМ рисунками. Но это не выход, может быть подскажете как решить эту проблему.
Мне кажется что есть другой путь загружать рисунков в программу из файлов-рисунков находящихся на жёстком диске.
Проблема запуска приложения из своей программы
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Грязь под ногами бродяг, чище чем фальшь сладких слов. (с) Ария. "Улица роз".
Проверь рабочий каталог, готорый у твоей программы устанавливается
Всё об отдыхе на http://chugaga.com
MaxmaD, у CreateProcess 3-й параметр с конца как раз позволяет задать текущий католог (у тебя сейчас там nil, т.е. тек. каталог наследуется от запускающего процесса).