IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Delphi Discussion :

[Inno Setup] Une ancienne installation reste en mémoire


Sujet :

Outils Delphi

  1. #21
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    Ce n'est pas une bonne solution. Rien ne garantit que l'utilisateur courant est administrateur (requis par ton installateur) et s'il ne l'est pas, ce n'est pas son répertoire qui sera supprimé mais bien celui de l'admin. Comme déjà dit, il faudrait passer par Active setup pour cela.
    Cela dit, si l'utilisateur a apporté des modifications, est-ce bien judicieux de les écraser ?

    Le manifest peut être interne (compilé dans l'exe) ou externe (fichier séparé).

    A l'aide du bloc-notes, crée ce fichier (ce qui est en rouge peut être personnalisé) :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
              <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MonProg" type="win32"/>
    	  
              <description>Mon programme</description>
    	  
              <dependency>
                          <dependentAssembly>
    			<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
    		</dependentAssembly>
    	</dependency>
    	
    	<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    		<security>
    			<requestedPrivileges>
    				<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
    			</requestedPrivileges>
    		</security>
    	</trustInfo>
    </assembly>

    Nomme-le du nom de ton app avec l'extension .manifest. Si le programme s'appelle monprog.exe, il se nommera monprog.exe.manifest.
    Voilà, à installer dans le même répertoire que ton application
    Certaines informations peuvent être en cache, il faudra peut-être un reboot.

    Dernier détail mais... de taille. Si ce programme écrit dans Program Files, tu n'es pas au bout de tes soucis. Il faudra soit désactiver l'UAC, soit le lancer en admin. Sinon erreur 5 (access denied).
    Empêcher la virtualisation est une chose mais cela ne corrigera pas des erreurs de conception !

  2. #22
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Dernier détail mais... de taille. Si ce programme écrit dans Program Files, tu n'es pas au bout de tes soucis. Il faudra soit désactiver l'UAC, soit le lancer en admin. Sinon erreur 5 (access denied).
    Empêcher la virtualisation est une chose mais cela ne corrigera pas des erreurs de conception !
    Justement il y a erreur de conception. Moi je dois créer un installateur fonctionnel c'est tout. J'informerai qu'il y a une erreur de conception et que dans le futur si Microsoft supprime le répertoire VirtualStore bah ça ne marchera plus après à eux de voir si ils veulent corriger ou pas. Le manifest que j'avais crée était plus court et je l'avais nommé NonExecutable.Exe.Manisfest, monprog.exe.manifest ne passait pas.


    Il me faut juste la variable qui contient le nom du répertoire d'installation, tu n'as pas une idée?

  3. #23
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    {app}

  4. #24
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    {app} c'est le chemin complet moi il me faut juste le nom du répertoire

  5. #25
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    N'avoir que le répertoire le plus bas n'a pas grans sens. La seule alternative pour que ce programme fonctionne à peu prêt correctement sera de l'installer ailleurs que dans Program Files.

  6. #26
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Une autre alternative c'est de faire comme Henri Ford avec la Ford T: ne pas donner à l'utilisateur le choix du nom du répertoire d'installation. Mais ils pourront installer qu'une seule version, chaque nouvelle installation écrasera l'autre. Innosetup utilise ce nom choisit, je pense que c'est stocké quelque part et que c'est réutilisable mais bon je ne trouve pas.

  7. #27
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    Citation Envoyé par thedev44 Voir le message
    Mais ils pourront installer qu'une seule version, chaque nouvelle installation écrasera l'autre.
    C'est toi qui défini le répertoire par défaut et rien n'interdit d'ajouter par exemple un numéro de version. DefaultDirName={pf}\Mon Prog {#Version}.
    Et si tu veux plusieurs installations en parallèle, il suffit que le AppId soit différent pour chaque installateur : AppId=Mon prog {#Version} (AppId ne doit pas nécessairement être un GUID).

    Citation Envoyé par thedev44 Voir le message
    Innosetup utilise ce nom choisit, je pense que c'est stocké quelque part et que c'est réutilisable mais bon je ne trouve pas.
    Seul le chemin complet est intéressant, ce n'est pas du relatif mais de l'absolu. Ne focalise pas sur C:\Program Files.

  8. #28
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    J'ai codé une fonction dans la partie [CODE] qui retourne le nom de l'appli choisi. Mais je ne sais pas comment l'utiliser dans la partie [InstallDelete]


    ---------
    edit; je donne plus de détails

    Dans la partie [Code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var
      //
      nom: String;
     
    function maFonction(): String;
    begin
         //
        //
         Result := nom;
    end;
    Dans la partie [InstallDelete]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Name: "C:\Users\{%USERNAME}\AppData\Local\VirtualStore\Program Files (x86)\{%maFonction}"; Type: filesandordirs
    ça compile mais je n'ai pas le résultat attendu

  9. #29
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    La déclaration de la fonction doit être ainsi function UserPath(Param: String): String; ce qui donnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [InstallDelete]
    Name: {code:UserPath}; Type: filesandordirs

  10. #30
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Merci ça fonctionne avec ta méthode, c'est dommage qu'on ne peut pas appeler les fonctions comme on le souhaite. UserPath est appelé 3 fois (un MsgBox est affiché 3 fois) je ne sais pas pourquoi.

  11. #31
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Ma fonction doit retourner plusieurs chemins du coup j'ai voulu utiliser un tableau mais function UserPath(Param: String): Array of String; ne passe pas et je ne trouve pas la fonction UserPath dans la doc.

  12. #32
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 680
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 680
    Points : 13 086
    Points
    13 086
    Par défaut
    UserPath était un exemple. Tu l'appelles comme tu veux puisque c'est toi qui la code

    Si tu as plusieurs chemins, soit tu déclares plusieurs fonctions, soit tu traites le paramètre.

  13. #33
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Ah ok
    J'ai essayé avec 2 fonctions, ça passe nickel, mais je veux le traiter avec les paramètres je trouve que c'est plus propre. Je me suit référé aux exemples fournis mais mon code est faux. Peut être que tu verra l'erreur. Je ne sais pas si c'est le passage du paramètre ou les if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [InstallDelete]
    Name: {code:UserPath|'le1')}; Type: filesandordirs
     
     
    [Cooooode]
    var
      //
     
    function UserPath(p: String): String;
    begin
         //
        //
     
         if(p = 'le1')  then
           begin
              //
              MsgBox(chemin1, mbConfirmation, MB_YESNO);   //jamais affiché
              Result := chemin1;
           end;
     
         if(p = 'le2')  then
           begin
            //
            Result := chemin2;
           end;
    end;

Discussions similaires

  1. [V5R4] Réduction des ODP gardée en mémoire
    Par punkoff dans le forum AS/400
    Réponses: 5
    Dernier message: 25/06/2009, 14h44
  2. Réponses: 4
    Dernier message: 15/08/2007, 22h26
  3. Configurer Eclipse avec une ancienne installation de MinGW
    Par millie dans le forum Eclipse C & C++
    Réponses: 0
    Dernier message: 11/08/2007, 10h14
  4. Réponses: 9
    Dernier message: 18/04/2005, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo