Comment empêcher un raccourci Windows de mettre à jour son chemin d'accès?

24

Lors du développement de mon produit, mon appareil de test a plusieurs versions de l'application installées en même temps. Cependant, afin d'obtenir les chemins absolus que mon application utilise pour fonctionner, je dois changer ou renommer les dossiers afin que la version que je veux tester ait le bon chemin, par exemple C:\Program Files\My Company\My App\My App.exe. J'ai créé un raccourci qui cible ce chemin, mais si ce raccourci est ouvert alors qu'aucune des versions n'a actuellement ce chemin, le raccourci se mettra automatiquement à jour, pensant que le fichier a été déplacé de manière permanente. Cela a provoqué des échecs silencieux jusqu'à ce que je découvre ce qui se passait. Je ne savais pas que c'était une fonctionnalité des raccourcis Windows jusqu'à présent.

Ma question est donc simple. Existe-t-il un moyen de désactiver cette fonctionnalité? Globalement, c'est bien, mais une solution par raccourci serait préférable.

L'utilisation d'un fichier de commandes au lieu d'un raccourci est une solution, mais je me demande s'il existe un moyen de faire fonctionner cela tout en utilisant un raccourci.

J'utilise Windows 10 Famille et Windows 7 Famille.

Kyle Delaney
la source
10
Ce que j'ai fait dans le passé, c'est utiliser un fichier batch ( .bat) avec une commande simple, par exemple start "" "C:\path\to\file.exe".
Bob
1
Avez-vous essayé de créer un lien symbolique (à l'aide de la mklinkcommande) au lieu d'un .lnkfichier à la place? Ou ceux-ci sont-ils également mis à jour?
JAB
1
Les liens symboliques @JAB ne doivent pas être mis à jour, mais présentent certains inconvénients (nécessitent des privilèges d'administrateur, ne peuvent pas passer d'arguments, etc.). Bien qu'ils fonctionnent bien si ce n'est pas un problème.
Bob
3
Je pensais que le raccourci en lecture seule fonctionnerait (j'en suis sûr), mais après avoir testé, je vois que non. En effet, le raccourci n'est pas réécrit; la cible est trouvée lorsque le raccourci est exécuté. Juste pour que personne d'autre n'essaye.
Chris H
1
@PetSerAl comme je l'ai dit ci-dessus, cela ne fonctionne pas.
Chris H

Réponses:

13

Vous pouvez utiliser PowerShell! Ce petit script frappe le fichier LNK pour produire le même effet que l'utilisation de l' shortcututilitaire classique .

$linkfile = Resolve-Path $args[0]
$bytes = [IO.File]::ReadAllBytes($linkfile)
$bytes[0x16] = $bytes[0x16] -bor 0x36
[IO.File]::WriteAllBytes($linkfile, $bytes)

Pour l'utiliser, enregistrez ce texte dans un .ps1fichier, par exemple notrack.ps1. Si vous ne l'avez pas déjà fait, suivez les instructions de la section Activation des scripts du wiki de balise PowerShell . Ensuite, vous pouvez l'exécuter à partir d'une invite PowerShell:

.\notrack.ps1 C:\path\to\my\shortcut.lnk

Les raccourcis ainsi modifiés ne changeront pas lorsque leur cible se déplacera. Si un raccourci comme celui-ci se casse, rien ne se produira lorsque vous essayez de l'ouvrir.

J'ai rassemblé les mathématiques binaires utilisées dans mon script à partir de ce PDF Microsoft de 48 pages au format LNK .

Ben N
la source
25

Arrêtez et désactivez le service: Distributed Link Tracking Client (TrkWks).

Le suivi des liens distribués suit les liens dans les scénarios où le lien est établi vers un fichier sur un volume NTFS, comme les raccourcis shell. Si ce fichier est renommé, déplacé vers un autre volume sur le même ordinateur, déplacé vers un autre ordinateur ou déplacé dans d'autres scénarios similaires, Windows utilise le suivi de lien distribué pour rechercher le fichier.

Source: suivi des liens distribués - Support Microsoft

Steven
la source
Bonne idée, mais remarquablement, cela n'a pas fonctionné. Le raccourci a toujours trouvé le fichier même lorsque le chemin d'accès était un répertoire plus long.
Kyle Delaney
Êtes-vous sûr que le service est arrêté? Après avoir arrêté le service DLTC, j'ai déplacé ou renommé l'exécutable. Lorsque j'ai exécuté le raccourci, j'ai reçu une erreur "Problème avec le raccourci" indiquant que la cible est manquante et invitant à supprimer le raccourci.
Steven
10
La fonctionnalité «trouver la bonne cible» remonte à la série Windows 9x et est antérieure aux versions NT de Windows. DLT n'existait pas sur Windows 9x. Cela ne veut pas dire que le DLT n'est pas pertinent; Windows va utiliser si cela aide DLT pour trouver une cible de raccourci.
MSalters
2
@Steven Oui, je suis sûr que le service est désactivé. Dans Windows 10, je suis entré dans les services, j'ai trouvé Distributed Link Tracking Client, j'ai cliqué sur le bouton d'arrêt, redémarré mon ordinateur et vérifié à nouveau le service. Il y a un bouton Démarrer et le service ne dit pas courir. Les raccourcis se mettent toujours à jour.
Kyle Delaney
8

Utilisez la shortcut.execommande Option -s:

shortcut: [-? -h -f -c -r -s] [[-t] target [[-n] name]] [-d working directory]
        [-a Arguments] [-i Iconfile] [-x Icon index] [-u {all|[natdix]}]
        [-l logfile]

  -? -h        This help
  -f           Force overwrite of an existing short cut
  -c           Change existing shortcut
  -s           Make shortcut non tracking (Stupid)
  -r           Resolve broken shortcut
  -t target    Specifies the target of the shortcut
  -n name      Specifies the file name of the shortcut file
  -d directory Specifies the directory name to start the application in
  -a arguments Specifies the arguments passed when the shortcut is used
  -i iconfile  Specifiles the file the icon is in
  -x index     Specifies the index into the icon file
  -u [spec]    Dumps the contents of a shortcut. 'all' is the same as 'natdix'
               but the letters of 'natdix' can be specified to display specific
               fields in the shortcut (repeats allowed, and order followed)
  -l logfile   record error messages in specified file
Sunzi
la source
4
Malheureusement, shortcut.exe n'est plus facilement disponible.
Daniel B
@DanielB Vous avez raison, j'ai oublié que j'ai sauvé shortcut.exe sur certaines versions de Windows.
Sunzi
2
@Daniel savez-vous quelles versions de Windows l'ont? Cela pourrait être utile pour certaines personnes.
gronostaj
1
Il fait apparemment partie du Kit de ressources du serveur Windows NT4. Il a été initialement mis à disposition sur CD.
Daniel B
4

Vous pouvez activer le GPO suivant:

Configuration utilisateur \ Modèles d'administration \ Menu Démarrer et barre des tâches \ N'utilisez pas la méthode basée sur la recherche lors de la résolution des raccourcis shell

clé de registre correspondante: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Configuration utilisateur \ Modèles d'administration \ Menu Démarrer et barre des tâches \ N'utilisez pas la méthode basée sur le suivi lors de la résolution des raccourcis shell

clé de registre correspondante:

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveTrack

Configuration utilisateur \ Modèles d'administration \ Composants Windows \ Explorateur de fichiers \ Ne pas suivre les raccourcis shell pendant l'itinérance

clé de registre correspondante: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo

Swisstone
la source
Comment activer un GPO? Où puis-je trouver la configuration utilisateur?
Kyle Delaney
sur Windows 10, vous pouvez cliquer avec le bouton droit sur le bouton Démarrer -> Exécuter et écrire: gpedit.msc -> cliquer sur OK, alors vous pourrez trouver la configuration utilisateur, etc ... OU vous pouvez créer les clés de registre que j'ai spécifiées ( Type: DWORD, avec une valeur de 1)
Swisstone
J'ai une erreur. Windows n'a pas pu trouver gpedit.msc.
Kyle Delaney
OK, vous devez donc créer les clés manuellement dans le Registre. Si vous ne savez pas comment faire, j'ai créé un fichier .reg que vous pouvez importer: pastebin.com/KdPYFwff copiez-collez simplement le contenu dans un nouveau fichier qui doit se terminer par l'extension ".reg" (pas. txt) et double-cliquez dessus
Swisstone
Merci. Je l'ai fait, redémarré mon ordinateur et vérifié que les clés de registre étaient maintenant en place à l'aide de regedit. Les raccourcis se mettent toujours à jour.
Kyle Delaney