2013-07-14 2 views
1

Для установки Win 8 требований, мне нужно скопировать файл данных (data.mpd) из установочного каталога предыдущей установки (как правило, c:\ProgramFiles но пользователи могли бы изменить на что-то другое) в новый каталог c:\User\....Копирование файлов из предыдущей установки

Как я могу:

  • Получить путь из предыдущей установки
  • проверить, если файл существует data.mpd
  • Скопируйте этот файл в C: \ Users ...
+0

Если я правильно понял, вы хотите получить путь к предыдущей установке вашего приложения, проверьте, есть ли файл 'data.mpd' и скопируйте этот файл в папку' C: \ Users \ .. ' это правильно ? – TLama

+0

Да ... Дело в том, что оно может быть расположено в C: \ ProgramFiles (так как это значение по умолчанию, предложенное InnoSetup), но это не гарантировано (пользователь мог изменить исходный каталог) – TGMDev

ответ

0

Вы можете использовать WizardForm.PrevAppDir свойство, которое держит путь к папке, где установщик с определенным AppId ранее установленного приложения (пустой, если он еще не установлен). Обратите внимание, что это свойство заполняется после инициализации формы мастера, поэтому прочитайте ее после события InitializeWizard.

Для вашей задачи, я хотел бы сделать эту операцию на этапе предварительной установки, так и для метода CurStepChanged событий, я хотел бы написать что-то вроде:

[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    DataFilePath: string; 
begin 
    // check if the current step is pre-installation step and if the 
    // application had been previously installed; if so, then... 
    if (CurStep = ssInstall) and (WizardForm.PrevAppDir <> '') then 
    begin 
    // build and store the path to the Data.mpd file from the prev. 
    // installation path 
    DataFilePath := AddBackslash(WizardForm.PrevAppDir) + 'Data.mpd'; 
    // check, if that Data.mpd file exists; if so, then... 
    if FileExists(DataFilePath) then 
     // copy it to the target directory; if it fails, show error message 
     if not FileCopy(DataFilePath, <your new directory here>, False) then 
     MsgBox('Copying of the Data.mpd failed!', mbError, MB_OK); 
    end; 
end; 
+0

Спасибо за ваш ответ ... Но, я думаю, я довольно простой пользователь InnoSetup ... Я никогда не использую классы поддержки ... У вас есть образец для такого использования? – TGMDev

+0

Правильно в ответе ... Код, который я написал, вы просто вставьте в свой файл сценария и замените строку '<ваш новый каталог здесь>' папкой, которую вы хотите скопировать файл 'Data.mpd' так как вы не указали конкретную папку (вы сказали только «C: \ Users ...»). – TLama

+1

Спасибо, TLama ... Он отлично работает ... – TGMDev

0

Использование DisableDirPage=auto. Это предотвратит изменение пользователем пути установки при обновлении.

Затем ваше приложение (а не инсталлятор) обнаруживает этот файл в своей собственной папке и копирует его в папку для каждого пользователя. Это даст вам наиболее надежное поведение в случае, если несколько пользователей запускают ваше приложение (что является целым рядом с данными для каждого пользователя).

Смежные вопросы