Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1163964531
flock
2006-11-19 22:28
2006.12.17
Число


15-1164723562
TUser
2006-11-28 17:19
2006.12.17
Чего только не бывает ...


9-1140174587
Древолаз
2006-02-17 14:09
2006.12.17
Ошибка GLOxOde, ODEGL, ODEImport


2-1164636182
Фёдр_иваныч
2006-11-27 17:03
2006.12.17
Разложение числа на множетели


3-1160143985
menart
2006-10-06 18:13
2006.12.17
Полнотекстовый поиск MS SQL SErver 2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский