2013-07-14 7 views
1

Pour adapter Win 8 exigences, je dois copier un fichier de données (data.mpd) à partir du répertoire d'installation de l'installation précédente (généralement c:\ProgramFiles, mais les utilisateurs auraient pu changer à autre chose) à un nouveau répertoire c:\User\....Copier les fichiers d'installation précédente

Comment puis-je:

  • Obtenez le chemin de l'installation précédente
  • vérifier si le fichier existe data.mpd
  • Copiez ce fichier dans le répertoire C: \ Users ...
+0

Si je comprends bien, vous voulez obtenir le chemin de l'installation précédente de votre application, vérifiez s'il y a le fichier 'data.mpd' et copiez ce fichier dans le dossier' C: \ Users \ .. ', Est-ce correct ? – TLama

+0

Oui ... Le point est qu'il peut être situé à C: \ ProgramFiles (comme c'est le répertoire par défaut proposé par l'InnoSetup) mais ce n'est pas garanti (l'utilisateur aurait pu changer le répertoire par défaut) ... – TGMDev

Répondre

0

Vous pouvez utiliser la propriété WizardForm.PrevAppDir, qui détient le chemin du dossier, où le programme d'installation avec un certain AppId avait déjà installé l'application (vide si elle n'a pas été encore installé). Notez que cette propriété est remplie après l'initialisation du formulaire de l'assistant, donc lisez-la après l'événement InitializeWizard.

Pour votre tâche, je ferais cette opération à l'étape de pré-installation, donc pour la méthode d'événement CurStepChanged, je voudrais écrire quelque chose comme:

[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

votre réponse ... Mais, je suppose, je suis un utilisateur InnoSetup assez basique ... Je n'utilise jamais les classes de support ... Avez-vous un échantillon pour ce genre d'utilisation? – TGMDev

+0

Il est juste dans la réponse ... Le code que j'ai posté vous allez simplement coller dans votre fichier script et remplacer la chaîne '' avec le dossier que vous voulez que le fichier 'Data.mpd' soit copié puisque vous n'avez pas spécifié le dossier concret (vous avez seulement dit 'C: \ Users ...'). – TLama

+1

Merci, TLama ... Ça marche bien ... – TGMDev

0

Utilisez DisableDirPage=auto. Cela empêchera les utilisateurs de modifier le chemin d'installation lors d'une mise à niveau.

Ensuite, demandez à votre application (pas au programme d'installation) de détecter ce fichier dans son propre dossier et de le copier dans le dossier par utilisateur. Cela vous donnera le comportement le plus robuste dans le cas où plusieurs utilisateurs exécuteraient votre application (ce qui est le point d'avoir des données par utilisateur).

Questions connexes