Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?
Поиск
L


Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 3
Всего онлайн: 3
Зарегистрировано юзеров: 5759
Комментариев на сайте: 623
Новый юзер: Marcushic



Последние комментарии
c
N0E0O7 прокомментировал "Урок 1 - Инициализация OpenGL":
А у меня форма чёрная запускается
dimonsky прокомментировал "Урок 2 - Простые примитивы":
GetDC(handle) вместо canvas.handle, и убрать вызов FormResize. Тогда получается конфетка.



Мы в соцсетях
c
Delphi
Копирование программы во временный каталог

Чтобы не смущать высокое собрание подробным рассмотрением алгоритма, приведу конкретный пример исходника.

program Setup;

uses 
Windows, 
SysUtils;

const 
ReRunParameter = '/install_from_temp_directory';

var 
TempPath: array [0..MAX_PATH] of Char; 
SrcPath: String;

begin 
if ParamStr(1) = ReRunParameter then 
SrcPath := ParamStr(2) 
else 
if GetDriveType(PChar(ParamStr(0)[1] + ':')) = DRIVE_REMOVABLE then 
begin 
// Если программа была запущена без ключа и с дискеты, то 
// копируем её во временный каталог и перезапускам 
// Текущее приложение завершаем. 
GetTempPath(MAX_PATH, TempPath); 
// Добавлям к пути временного каталога символ '', если его там нет 
if (StrLen(TempPath) > 0) and (TempPath[StrLen(TempPath)] <> '') then 
StrCat(TempPath, ''); 
// Копируем файл через вызов функции CopyFile из WinAPI 
CopyFile(PChar(ParamStr(0)), PChar(String(TempPath) + ExtractFileName(ParamStr(0))), False); 
// Запускаем файл с двумя параметрами 
WinExec(PChar(String(TempPath) + ExtractFileName(ParamStr(0)) + ' ' + 
ReRunParameter + ' ' + ExtractFilePath(ParamStr(0))), CmdShow); 
Exit; 
end 
else 
SrcPath := ExtractFilePath(ParamStr(0)); 
// Здесь начинается программа инсталляции 
// Переменная SrcPath показывает нам, откуда надо копировать файлы 
end. 
Есть две грабли, на которые можно наступить в приведённом примере. Первые лежат в вызове функции GetTempPath. Если у вас нет переменных окружения TMP и TEMP, то временным каталогом станет текущий каталог программы, то есть, фактически, ваша дискета.

Вы можете проверять, не находится ли временный каталог на сменном диске (с помощью вызова GetDriveType), и, если находиться, считать временным каталогом C:TEMP (если его нет — создайте самостоятельно).
Вторые грабли заключаются в том, что после завершения инсталляции программу из временного каталога желательно удалить, но сделать этого вы не сможете, поскольку программа в этот момент выполняется. Вспомните, что в Windows 95 и Windows NT выполняющуся программу удалять нельзя.
В общем случае, решения этой проблемы я не знаю. Собственно, поскольку файл останется во временном каталоге, он будет одним из первых кандидатов на удаление (если пользователь хоть когда-нибудь чистит свой временный каталог :) Тем не менее, есть один хитрый способ удаления этого файла, о котором я расскажу ниже, в параграфе о деинсталляции.
Примечание: Если для вас важен размер вашей инсталляции, вы можете взять только тот кусочек, который приведён выше, и сделать из него отдельную программу (которая будет очень небольшого объёма). Саму программу инсталляции вы предварительно сжимаете, а перед запуском распаковываете её во временный каталог (а не копируете, как это сделано здесь).
Обратите внимание, что в этом случае программа должна распаковываться в любом случае, а не только если она запущена с дискеты.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 8 Декабря 2013
Просмотров: 110885


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.