Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизНе могу разобраться с ExtractFilePath(Application.ExeName) Найти похожие ветки
← →
Феникс © (2006-11-28 16:04) [0]При первом обращении ExtractFilePath(Application.ExeName) показывает реальный путь к моему EXE, но только программа работала с OpenDialog, при следующем обращении ExtractFilePath(Application.ExeName) показывает мне путь OpenDialog а не моего EXE. Как ExtractFilePath(Application.ExeName) использовать во "второй" раз? Спасибо за помощь новичку...
← →
Reindeer Moss Eater © (2006-11-28 16:07) [1]При любом количестве вызовов ExtractFilePath(Application.ExeName) вернет одно и то же.
У тебя оптический обман.
← →
umbra © (2006-11-28 16:08) [2]в параметрах OpenDialog на до выставить в true опцию ofNoChangeDir
← →
clickmaker © (2006-11-28 16:09) [3]GetCurrentDir может вернуть другое после вызова OpenDialog, если у него не стоит флажок NoChangeDir, но никак не ExtractFilePath
← →
Reindeer Moss Eater © (2006-11-28 16:10) [4]От этой опции поведение ExtractFilePath(Application.ExeName) не изменится.
← →
Феникс © (2006-11-28 16:29) [5]Наверное не все написал...
У меня есть EXE-1 в котором я вызываю ExtractFilePath(Application.ExeName).Потом в нем идет обращение по разным путям, после чего, из него я запускаю другой EXE-2.
В EXE-2 я вызываю ExtractFilePath(Application.ExeName). Он мне показывает последний путь по которому я обращался из программы EXE-1.
Вот теперь вроде все написал...
← →
Игорь Шевченко © (2006-11-28 16:33) [6]
> из него я запускаю другой EXE-2.
Вот тут собака и порылась. Как запускаешь ?
← →
Феникс © (2006-11-28 16:49) [7]>>Игорь Шевченко
ShellExecute(Handle, nil,Path_EXE,nil,nil,SW_RESTORE);
← →
Dmitrij_K (2006-11-28 16:51) [8]ExtractFilePath(Application.ExeName) в EXE-2 я показывает где находится EXE-2
Если подругому, то см. [1]
← →
Игорь Шевченко © (2006-11-28 16:51) [9]Феникс © (28.11.06 16:49) [7]
А как получаешь Path_EXE ? Ты не стесняйся многословности, рассказывай
← →
Barloggg (2006-11-28 16:51) [10]а я просто в onCreate формы глобально сохраняю путь до ехе-шника и не маюсь больше такими вопросами.
не будет же ехе-шник переезжать во время выполнения программы в самом деле?
← →
Barloggg (2006-11-28 16:53) [11]кстати путь к ехешнику также можно достать из нулевого параметра к командной строке. он всегда там есть :)
← →
Reindeer Moss Eater © (2006-11-28 16:59) [12]а я просто в onCreate формы глобально сохраняю путь до ехе-шника и не маюсь больше такими вопросами.
не будет же ехе-шник переезжать во время выполнения программы в самом деле?
МудрО.
Останется только надеяться на то, что эту глобальную переменную никто не испортит.
кстати путь к ехешнику также можно достать из нулевого параметра к командной строке. он всегда там есть :)
TApplication = class ...
...
property ExeName: string read GetExeName;
...
function TApplication.GetExeName: string;
begin
Result := ParamStr(0);
end;
← →
Феникс © (2006-11-28 17:05) [13]Path_:=ExtractFilePath(Application.ExeName);
BatFilename:="del.bat";
AssignFile(BatFile, BatFilename);
Rewrite(BatFile);
SS:=" :Repeat "+#13#10+
" del "+Path_+ExtractFileName(Application.ExeName)+#13#10+
" if exist ""+ExtractFileName(Application.ExeName)+"" goto Repeat "+#13#10+
" copy "+s+" "+ExtractFilePath(Application.ExeName)+#13#10+s+#13#10;
if FileExists(ReadIni("PATH","RefreshPath")+"\File.txt")=True
then
else begin
HSShowMessage("Отсутсвует файл File.txt");
EXIT;
end;
AssignFile(SpisokFile,ReadIni("PATH","RefreshPath")+"\File.txt");
Reset(SpisokFile);
while not EOF(SpisokFile) do
begin
ReadLn(SpisokFile,Sfile);
if Sfile<>ExtractFileName(Application.ExeName)
then begin
if FileExists(Path_+Sfile)=True then Win32Check(DeleteFile(PChar(Path_+Sfile)));
Win32Check(CopyFile(PChar(ReadIni("PATH","RefreshPath")+"\"+Sfile), PChar(Path_+Sfile), True));
end;
end;//while not EOF(InpFile) do
CloseFile(SpisokFile);
WriteLn(BatFile, SS); // записываем строку
CloseFile(BatFile);
Path_EXE:=PChar(Path_+"\del.bat" );
ShellExecute(Handle, nil,Path_EXE,nil,nil,SW_RESTORE);
Программа создает bat-файл в котором она удаляет EXE, копирует нужные файлы из пути ReadIni("PATH","RefreshPath"), потом запускает EXE.
Так вот во втором запуске EXE - Path_:=ExtractFilePath(Application.ExeName) - показывает путь ReadIni("PATH","RefreshPath")...
← →
Reindeer Moss Eater © (2006-11-28 17:07) [14]Правильное имя будет в ParamStr(1).
Когда-то давно сталкивался с таким феноменом, но уже не помню в чем там был прикол.
← →
Reindeer Moss Eater © (2006-11-28 17:12) [15]В общем надо читать справку по CreateProcess и примечания про первые два её параметра.
← →
Reindeer Moss Eater © (2006-11-28 17:21) [16]Поднял свои старые исходники с запуском одной программы из другой.
Вызов выглядит так:
CreateProcess("mysecondconsole.exe",
"mysecondconsole.exe myparam",
......
Вспомнил, что в случае если опускался первый параметр (что допускается справкой), то получалась та же самая чехарда с ParamStr во втором приложении.
Видимо ShellExecute используя CreateProcess поступает так же.
← →
vain © (2006-11-28 21:06) [17]Обычно запускают программы с помощью CraeteProcess, а там, почитай справку, есть параметр:
LPVOID lpEnvironment, // pointer to new environment block
Вот.
А если указать вместо параметра nil, то переменные окружения остануться прежними, то есть, как и у вызывающей программы. Из-за этого и может случиться неразбириха.
В общем, мой тебе совет: используй CreateProcess, почитай по нему справку и постарайся не напутать с переменными сред. Имхо, тогда должно работать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c