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

C Discussion :

Raccourcis avec chemin relatif ?


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Raccourcis avec chemin relatif ?
    Bonjour,
    J'aimerai faire un raccourcis avec un lien relatif mais c'est impossible, j'ai vu que c'était possible en batch mais j'aime pas cette façon de faire, en plus avec la petite console qui s'ouvre, non merci.

    Je voudrais savoir si c'était possible en C et donc avec un exe qui ouvre un autre exe avec des options. ("programme.exe /e /m options")

    C'est pour mettre sur une clé usb ( logiciels portables etc.. )

    Je vous remercie

    Des fois sur des CD/DVD, je vois un exe qui lance un msi avec des options donc ça devrait être théoriquement faisable ..

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nestea57 Voir le message
    Je voudrais savoir si c'était possible en C et donc avec un exe qui ouvre un autre exe avec des options. ("programme.exe /e /m options")
    Salut

    2 façons de faire
    1) en passant par system => system("programme.exe /e /m options")Ton exécutable appelle le programme dans un processus fils puis reprend la main une fois que le programme a terminé

    2) en passant par une des différentes primitives exec (il y en a 6 mais dans ton cas la plus simple est execl)
    =>execl("programme.exe", "programme.exe", "/e", "/m", "options", NULL)Là, le système remplace en mémoire ton exécutable par le nouveau programme
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ahhhh merci bien Sve@r !!!!
    La 2ème solution me semble la mieux

    Je compilerai tout ça demain et testerai, je vous tiens au courant mais il n'y aucune raison pour que ça ne fonctionne pas

    Dernière petite question :
    Est-il possible de faire une recherche d'un fichier sur tous les disques durs et disques amovibles ?
    Par exemple sur une de mes clés usb, j'ai un fichier à la racine bien spécifique ( qui a un nom bien spécifique ) et je voudrais rechercher sur tous les disques ( forcément, la lettre du lecteur de la clé usb change .. ) et ensuite faire une simple condition pour lancer un fichier sur ce disque ou s'il ne trouve pas, ne rien faire.
    Je sais pas si c'est clair.
    En gros : pouvoir faire une recherche d'un fichier à la racine de chaque partitions, disques amovibles à la linux "find /*/monfichier".

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nestea57 Voir le message
    Dernière petite question :
    Est-il possible de faire une recherche d'un fichier sur tous les disques durs et disques amovibles ?
    Par exemple sur une de mes clés usb, j'ai un fichier à la racine bien spécifique ( qui a un nom bien spécifique ) et je voudrais rechercher sur tous les disques ( forcément, la lettre du lecteur de la clé usb change .. ) et ensuite faire une simple condition pour lancer un fichier sur ce disque ou s'il ne trouve pas, ne rien faire.
    Boucle pour parcourir les lecteurs de A à Z + opendir(), readdir(), closedir() + récursivité...

    Citation Envoyé par nestea57 Voir le message
    En gros : pouvoir faire une recherche d'un fichier à la racine de chaque partitions, disques amovibles à la linux "find /*/monfichier".
    Sous Linux, la commande serait plus simplement find / -name "monfichier". En effet, les lecteurs amovibles étant forcément montés dans un répertoire de la racine, le / les englobe tous...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Boucle pour parcourir les lecteurs de A à Z + opendir(), readdir(), closedir() + récursivité...


    Sous Linux, la commande serait plus simplement find / -name "monfichier". En effet, les lecteurs amovibles étant forcément montés dans un répertoire de la racine, le / les englobe tous...
    Merci bien
    ça fait longtemps que j'ai pas utilisé linux ... ( 3ans, du temps où j'avais un serveur dédié ) mais je trouvais linux beaucoup plus maniable que windows, on pouvait faire plus de choses précises.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nestea57 Voir le message
    ...mais je trouvais linux beaucoup plus maniable que windows, on pouvait faire plus de choses précises.
    Ben ça n'a pas changé.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben ça n'a pas changé.
    J'en doute pas une seule seconde ! ^^

    Je disais par là que je ne me souvenais plus je ne faisais ça que par "amateurisme" donc on oublie vite sans pratiquer.

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bon j'ai compilé et mis à ma sauce, ça marche mais pas pour un truc.

    J'ai TrueCrypt.exe, on peut l'ouvrir avec des options.

    Par exemple :
    TrueCrypt.exe /q background /e /m rm /v aa.tc
    Ce sont SES options que j'ai trouvé dans la doc, quand je le met dans un raccourcis ça marche nickel mais dès que j'essaie de le mettre dans execl, soit le programme ne s'ouvre pas soit c'est Truecrypt qui ne trouve pas le chemin ou le fichier "aa.tc" ( volume que je veux ouvrir )

    Ne se passe rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe /q background /e /m rm /v aa.tc", "TrueCrypt.exe /q background /e /m rm /v aa.tc", ".", (char*)0);
    TrueCrypt s'ouvre mais une fois le mot de passe rentré, il me dit qu'il ne trouve pas le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe", "TrueCrypt.exe /q background /e /m rm /v aa.tc", ".", (char*)0);
    Ne se passe rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe", "TrueCrypt.exe", "/q background /e /m rm /v aa.tc", ".", (char*)0);

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nestea57 Voir le message
    Bon j'ai compilé et mis à ma sauce, ça marche mais pas pour un truc.

    J'ai TrueCrypt.exe, on peut l'ouvrir avec des options.

    Par exemple :
    TrueCrypt.exe /q background /e /m rm /v aa.tc
    Ce sont SES options que j'ai trouvé dans la doc, quand je le met dans un raccourcis ça marche nickel mais dès que j'essaie de le mettre dans execl, soit le programme ne s'ouvre pas soit c'est Truecrypt qui ne trouve pas le chemin ou le fichier "aa.tc" ( volume que je veux ouvrir )

    Ne se passe rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe /q background /e /m rm /v aa.tc", "TrueCrypt.exe /q background /e /m rm /v aa.tc", ".", (char*)0);
    TrueCrypt s'ouvre mais une fois le mot de passe rentré, il me dit qu'il ne trouve pas le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe", "TrueCrypt.exe /q background /e /m rm /v aa.tc", ".", (char*)0);
    Ne se passe rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl( "TrueCrypt.exe", "TrueCrypt.exe", "/q background /e /m rm /v aa.tc", ".", (char*)0);
    Il faudrait aussi te renseigner un petit peu sur les primitives exec()
    Il y en a 6
    - execl => exec avec les arguments en liste (comme tu vois, tu places tes arguments les uns après les autres séparés par une virgule)
    - execle => execl + possibilité de passer à ton programme un environnement particulier. Tu le lui passes sous forme char ** (comme envp)
    - execlp => execl mais le système utilise le PATH pour trouver le programme

    - execv => exec avec les arguments passés sous forme de tableau de valeurs (comme argv)
    - execve => execv + environnement
    - execvp => execv + PATH

    Or quand tu appelles truecrypt depuis une console, tu as un PATH positionné qui permet au système de savoir où est cet exécutable. Mais depuis execl(), le PATH n'est pas pris en compte
    Donc soit tu mets le chemin en absolu =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl("c:\Program Files\TrueCrypt\TrueCrypt.exe", "TrueCrypt.exe", "/q background /e /m rm /v C:\Documents and Settings\nestea57\Mes Documents\aa.tc", ".", (char*)0);
    Soit tu utilises execlp() pour que ton système sache où se trouve truecrypt (accessoirement, si /q et background sont des arguments différents, je les mettrais en séparés =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execlp("TrueCrypt.exe", "TrueCrypt.exe", "/q",  "background", "/e", "/m",  "rm", "/v",  "C:\Documents and Settings\nestea57\Mes Documents\aa.tc", ".", (char*)0);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Je poste toujours avant, sachant que normalement ça prend du temps pour que quelqu'un réponde.

    En faisant : ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl("NE_PAS_EFFACER\\TrueCrypt.exe", "TrueCrypt.exe /q background /e /m rm /v NE_PAS_EFFACER\\vol\\fichiercrypte.tc", NULL);
    En fait, le path que prend truecrypt pour le fichier .tc est celui du raccourcis et non pas celui de Truecryt.

    Désolé encore.

Discussions similaires

  1. raccourcis avec chemin relatif
    Par Tex-Twil dans le forum Windows XP
    Réponses: 20
    Dernier message: 31/03/2020, 10h15
  2. Réponses: 0
    Dernier message: 03/07/2015, 01h34
  3. Raccourci (.lnk) avec chemin relatif
    Par Kcirtap dans le forum Windows XP
    Réponses: 5
    Dernier message: 16/11/2007, 21h36
  4. Créer un raccourci avec chemin relatif
    Par Australia dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 07/04/2006, 10h54

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