Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как заставить запускаться из определенной папки

Delphi , Файловая система , Директории

Как заставить запускаться из определенной папки

Автор: Vit
WEB-сайт: http://forum.vingrad.ru

Приведенный пример кода проверяет из какой папки запущена программа, если она запущена не из корневой - то переносит себя в корень и запускается оттуда

program Project1;
uses
  Forms, classes, windows, Sysutils, ShellApi,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var
  f: textFile;
  FileName: string;
begin
  if paramstr(1) <> '/runasis' then
  begin
    CopyFile(PChar(Paramstr(0)), PChar('c:\' + extractFilename(paramstr(0))),
      True);
    shellexecute(0, 'Open', PChar(extractFilename(paramstr(0))), '/runasis',
      'c:\', sw_restore);
    FileName := changefileext(paramstr(0), '.bat');
    assignFile(f, FileName);
    rewrite(f);
    writeln(f, ':1');
    writeln(f, format('Erase "%s"', [paramstr(0)]));
    writeln(f, format('If exist "%s" Goto 1', [paramstr(0)]));
    writeln(f, format('Erase "%s"', [FileName]));
    closefile(f);
    ShellExecute(0, 'Open', PChar(FileName), nil, nil, sw_hide);
  end
  else
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.

Программный код, который вы предоставили, написан на языке Delphi и проверяет, запущен ли программный файл из определенного каталога. Если не, то программа перемещается в корневой каталог и запускается заново.

Процесс работы следующий:

  1. Функция ParamStr(1) возвращает первый параметр командной строки, переданный программе.
  2. Если этот параметр не равен /runasis, то программа проверяет, запущена ли она из определенного каталога (текущего рабочего каталога).
  3. Если нет, то программа перемещается в корневой каталог с помощью CopyFile и ShellExecute.
  4. Затем программа создает файл batch с именем, похожим на имя оригинального исполняемого файла, пишет в него несколько строк и сохраняет его в корневом каталоге.
  5. Наконец, программа запускает этот файл batch с помощью ShellExecute.

Альтернативное решение:

Вместо перемещения программы в корневой каталог и создания нового файла batch можно использовать функцию ExtractFilePath, чтобы получить путь к каталогу, где запущена программа.

Пример кода:

if not (ExtractFilePath(ParamStr(0)) = ParamStr(1)) then
begin
  // Переместите себя в корневой каталог или выполните другое действие
end
else
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end;

В этом коде функция ExtractFilePath возвращает путь к каталогу, где запущена программа. Если он не равен /runasis, то можно выполнить какое-то действие. Иначе можно запустить программу как обычно.

Обратите внимание, что это подход может иметь некоторые ограничения в зависимости от вашей конкретной требований и ограничений.

В статье описывается пример программы на языке Delphi, который проверяет из какой папки запущена программа и если она не запущена из корневой - то переносит себя в корень и запускается оттуда.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:33:18/0.0052940845489502/1