Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Не могу разобраться с 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
15-1164730131
WErqw
2006-11-28 19:08
2006.12.17
Ну дайте решение задачи коммивояжера!!!


15-1164283232
Yegorchic
2006-11-23 15:00
2006.12.17
Создание нового подключения к Интернету


2-1164607754
vitv
2006-11-27 09:09
2006.12.17
Edit[i].text-возможно ли это?


6-1153823399
Leonid
2006-07-25 14:29
2006.12.17
Отправка e-mail при регистрации программы у заказчика


15-1164446738
Vovan#2
2006-11-25 12:25
2006.12.17
Если игрушки виснут.