Come posso impedire a un collegamento di Windows di aggiornare il suo percorso?


24

Durante lo sviluppo del mio prodotto, il mio dispositivo di test ha diverse versioni dell'applicazione installate contemporaneamente. Tuttavia, al fine di ottenere i percorsi assoluti utilizzati dalla mia applicazione per funzionare, ho bisogno di cambiare o rinominare le cartelle in modo che la versione che voglio testare abbia il percorso giusto, diciamo C:\Program Files\My Company\My App\My App.exe. Ho creato un collegamento destinato a questo percorso, ma se questo collegamento viene aperto quando nessuna delle versioni attualmente ha quel percorso, il collegamento si aggiornerà automaticamente, pensando che il file si sia spostato in modo permanente. Ciò ha causato guasti silenziosi fino a quando non ho scoperto cosa stava succedendo. Fino ad ora non sapevo che questa fosse una caratteristica delle scorciatoie di Windows.

Quindi la mia domanda è semplice. C'è un modo per disattivare questa funzione? A livello globale è buono, ma una soluzione per scorciatoia sarebbe meglio.

Utilizzare un file batch anziché un collegamento è una soluzione, ma mi chiedo se c'è un modo per farlo funzionare mentre si utilizza ancora un collegamento.

Sto usando Windows 10 Home e Windows 7 Home.


10
Quello che ho fatto in passato è usare un file batch ( .bat) con un semplice comando, ad es start "" "C:\path\to\file.exe".
Bob,

1
Hai provato a creare un collegamento simbolico (usando il mklinkcomando) invece di un .lnkfile? O anche quelli vengono aggiornati?
JAB

1
I link simbolici @JAB non devono essere aggiornati, ma presentano alcuni svantaggi (richiedono i privilegi di amministratore, impossibile passare argomenti, ecc.). Anche se funzionano bene se quelli non sono un problema.
Bob,

3
Pensavo che il collegamento in sola lettura avrebbe funzionato (ne sono sicuro), ma dopo aver provato ho visto che non funziona. Questo perché il collegamento non viene riscritto; la destinazione viene trovata quando viene eseguito il collegamento. Proprio così nessun altro ci prova.
Chris H,

1
@PetSerAl, come ho detto sopra, non funziona.
Chris H,

Risposte:


13

Puoi usare PowerShell! Questo piccolo script colpisce il file LNK per produrre lo stesso effetto dell'utilizzo shortcutdell'utilità classica .

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

Per usarlo, salva quel testo come .ps1file, ad es notrack.ps1. Se non lo hai già fatto, segui le istruzioni nella sezione Abilitazione degli script del tag wiki PowerShell . Quindi è possibile eseguirlo da un prompt di PowerShell:

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

Le scorciatoie modificate in questo modo non cambieranno quando il loro bersaglio si sposta. Se una scorciatoia come questa si rompe, non accadrà nulla quando si tenta di aprirla.

Ho raccolto la matematica binaria usata nel mio script da questo Microsoft PDF di 48 pagine nel formato LNK .


25

Arresta e disabilita il servizio: Distributed Link Tracking Client (TrkWks).

Il monitoraggio dei collegamenti distribuiti tiene traccia dei collegamenti negli scenari in cui viene effettuato il collegamento a un file su un volume NTFS, come i collegamenti della shell. Se il file viene rinominato, spostato su un altro volume sullo stesso computer, spostato su un altro computer o spostato in altri scenari simili, Windows utilizza il monitoraggio dei collegamenti distribuiti per trovare il file.

Fonte: Monitoraggio link distribuito - Supporto Microsoft


Buona idea, ma notevolmente non ha funzionato. Il collegamento ha ancora trovato il file anche quando il percorso era più lungo di una directory.
Kyle Delaney,

Sei sicuro che il servizio sia stato arrestato? Dopo aver interrotto il servizio DLTC, ho spostato o rinominato l'eseguibile. Quando ho eseguito il collegamento, ho ricevuto un errore "Problema con il collegamento" che diceva che l'obiettivo mancava e che chiedeva di eliminare il collegamento.
Steven,

10
La funzionalità "trova la destinazione giusta" risale alla serie Windows 9x e precede le versioni NT di Windows. DLT non esisteva su Windows 9x. Ciò non significa che DLT sia irrilevante; Di Windows sarà utilizzare DLT se questo aiuta a trovare una scorciatoia bersaglio.
MSalters,

2
@Steven Sì, sono sicuro che il servizio è disattivato. In Windows 10 sono entrato in Servizi, ho trovato Client di tracciamento dei link distribuiti, ho fatto clic sul pulsante di arresto, riavviato il computer e ho verificato nuovamente il servizio. C'è un pulsante Start e il servizio non dice in esecuzione. Le scorciatoie si aggiornano ancora.
Kyle Delaney,

8

Usa il shortcut.execomando Opzione -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

4
Purtroppo, shortcut.exe non è più facilmente disponibile.
Daniel B,

@DanielB Hai ragione, ho dimenticato di aver salvato shortcut.exe su alcune versioni di Windows.
Sunzi,

2
@ Daniele conosci quali versioni di Windows ce l'hanno? Potrebbe essere utile per alcune persone.
gronostaj,

1
Apparentemente fa parte del Resource Kit di Windows NT4 Server. È stato originariamente reso disponibile su CD.
Daniel B,

4

È possibile abilitare il seguente oggetto Criteri di gruppo:

Configurazione utente \ Modelli amministrativi \ Menu Start e barra delle applicazioni \ Non utilizzare il metodo basato sulla ricerca per risolvere i collegamenti della shell

chiave di registro corrispondente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Configurazione utente \ Modelli amministrativi \ Menu Start e barra delle applicazioni \ Non utilizzare il metodo basato sul rilevamento durante la risoluzione dei collegamenti della shell

chiave di registro corrispondente:

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

Configurazione utente \ Modelli amministrativi \ Componenti di Windows \ Esplora file \ Non tenere traccia dei collegamenti della shell durante il roaming

chiave di registro corrispondente: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo


Come abilito un oggetto Criteri di gruppo? Dove trovo la configurazione utente?
Kyle Delaney,

su Windows 10 puoi fare clic con il pulsante destro del mouse sul pulsante Start -> Esegui e scrivi: gpedit.msc -> fai clic su OK, quindi sarai in grado di trovare la configurazione dell'utente, ecc ... O puoi creare le chiavi di registro che ho specificato ( Tipo: DWORD, con un valore di 1)
Swisstone,

Ho ricevuto un errore Windows non è riuscito a trovare gpedit.msc.
Kyle Delaney,

OK, quindi è necessario creare le chiavi manualmente nel registro. Se non sai come farlo, ho creato un file .reg che puoi importare: pastebin.com/KdPYFwff basta copiare e incollare il contenuto in un nuovo file che deve terminare con l'estensione ".reg" (no. txt) e fai doppio clic su di esso
Swisstone,

Grazie. L'ho fatto, riavviato il mio computer e verificato che le chiavi di registro erano ora in atto utilizzando regedit. Le scorciatoie si aggiornano ancora.
Kyle Delaney,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.