Comment faire un raccourcis relatif ave icône

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 5 sept. 2005 à 16:49
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 15 sept. 2005 à 10:49
Les applications ont souvent besoins d'un certain nombre de fichiers dans le même répertoire que l'exe.
Je souhaiterais que mes applications soient utilisables par des gens qui n'y connaissent pas grand chose, et donc ne pas les submerger devant un grand nombre de fichiers.

Conséquement, j'ai opté pour placer un raccourcis, à la racine de l'application, qui pointe vers l'exe dans un sous dossier.
Ce raccourcis doit avoir un icône de mon choix et être relativement petit (50 Ko maximum, un exe vide en fait moins de 14).

Supposons que l'exe s'appelle run.exe et qu'il se trouve dans le sous dossier SYSTEM, il me faut un code équivalent au DOS 'start SYSTEM\run.exe'.

Le problème avec les batchs, c'est que l'on ne peut pas modifier l'icône.

Actuellement, mon raccourcis le plus petit en Delphi fait 363 Ko, à cause de l'unité forms.

L'unité forms me paraît obligatoire pour avoir une icône, car elle fournit TApplication...

Les .lnk ne sont pas relatifs, les pifs le sont, mais ils sont simplement copiés si on essaie de créer un raccourcis, donc ils ne fonctionnent plus dans un autre dossier.

L'idéal serait un exe...

Je travail actuellement à désassembler un petit exe (regedt32.exe, 3,5Ko).

Apparement celui-ci lance regedit.exe.

Il appelle 5 API, dans cet ordre:
KERNEL32.GetCommandLineA
KERNEL32.GetStartUpInfoA
KERNEL32.GetModuleHandleA
SHELL32.ShellExecuteA
KERNEL32.ExitProcess

Néanmoins, j'en sais encore moins sur sur la structure des .exe que sur l'assembleur (Position des icônes, description de l'exe...)

Je pense que je vais essayer de rédiger entièrement un exe.

Mais pour ça, il me faudrait plus d'infos sur ce dont Windows a besoin pour charger l'icône dans l'explorateur, la description dans les propriétés, et surtout le chargement en mémoire avant l'execution.

6 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
5 sept. 2005 à 17:18
Etant donné que ton application nécessite beaucoup de sous-fichiers, ne
pourrais-tu pas inclure un petit prog d'installation qui crée en
passant le raccourci directement en fonction du chemin de l'application
?


création d'un raccourci :

http://perso.wanadoo.fr/ni69/delphi_astuces_filesandfolders.htm


@+
Bonne Prog'
Nico [www.ni69.new.fr]

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 sept. 2005 à 17:33
Salut ni69

En fait, si je pouvais me passer d'installation, ce serait pas plus mal.

En plus, un petit raccourcis, c'est quand même pas la mère à boire !!!!!
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
5 sept. 2005 à 17:42
Je crois qu'il reste une solution : c'est d'ajouter le chemin de ton
application dans la variable d'environnement PATH. (mais là aussi, un
petit fichier d'install serait nécessaire). Ainsi, pour exécuter ton
application, tu n'aurais qu'à lancer la commande 'MonApp.exe'.
Attention dans ce cas à utiliser un nom d'application qui n'existe pas
dans d'autres répertoires listés dans PATH...

@+
Bonne Prog'
Nico [www.ni69.new.fr]

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 sept. 2005 à 14:52
Merci pour cette deuxième réponse, ni69 !

Pas bète le coup du PATH.

Cependant, la variable PATH est l'une des plus importante du système.

Le fait de rajouter des chemins d'accès ralentit le PC, du fait qu'il vérifie qu'aucun fichier ne correspond dans chacuns des chemins...

Sans oublier qu'une petite erreur de manip sur PATH peut poser problème à l'ensemble du PC.

Par contre, j'ai localisé l'icône de regedt32.exe, et je l'ai débuggée. Le code est vraiment court, même en assembleur.

Il sert à lancer regedit, en lui passant les paramètres qui ont été passés à regedt32.exe.

Je pense parvenir à modifier cet exe, et même automatiser son changement d'icône, malgrés mon inconnaissance de la table de relocation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
12 sept. 2005 à 16:17
Ok, le Path, c'était juste une idée.



Si tu arrives à quelque-chose dans cette voie (regedt32.exe), pourrais-tu le mettre ici svp ?

Merci ! (cela m'intéresse bien... )

@+

Nico { http://perso.wanadoo.fr/ni69/ }






N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 sept. 2005 à 10:49
Il y a des API de gestion de ressource.

Je suis tombé dessus par hasard.

J'en donne une pour que vous puissiez retrouver les autres.

UpdateResource

Ca devrait me faciliter le travail.

Elle devrait me pemettre de faire un prog qui remplace au moins l'icône, et peut être les infos de versions, d'un exe vers un autre.

En ce qui concerne mon raccourcis, je vais faire du bricolage:

Je connais l'EIP de départ et l'offset du code dans le .exe.

Je vais essayer de me faire une petite plage de travail remplie par des NOP !

Je devrait m'en sortir en n'appelant que les API déjà déclarées dans l'exe.

Voilà ce que je vais essayer de faire:

L'API GetCommandLine renvoie "c:\DIR\shortcut.exe" argument.

Je vais repérer la position du dernier antislash.

Je vais repérer la position des arguments.

Je vais copier cette chaîne jusqu'à cet antislash.

Je vais completer la chaîne copier par une chaîne en mémoire, "APP\SYSTEM" par exemple.

Je vais completer la chaîne copier par le nom du raccourcis (shortcut.exe).

Je vais balancer la chaîne copiée et les paramètres dans ShellExecute.

Je ne sais pas si je vais faire un prog capable de modifier la chaîne en mémoire.

Je posterai mon source en assembleur ici.

Le problème, c'est que je rentre le 19, presque à l'autre bout de la France, sans PC...
0
Rejoignez-nous