Jak zatrzymać aktualizację ścieżki skrótu systemu Windows?

24

Podczas opracowywania produktu na moim urządzeniu testowym zainstalowanych jest kilka wersji aplikacji jednocześnie. Jednak w celu uzyskania bezwzględnych ścieżek, z których korzysta moja aplikacja do pracy, muszę zmienić foldery lub zmienić ich nazwę, aby wersja, którą chcę przetestować, miała właściwą ścieżkę, powiedzmy C:\Program Files\My Company\My App\My App.exe. Utworzyłem skrót, który jest skierowany na tę ścieżkę, ale jeśli ten skrót zostanie otwarty, gdy żadna z wersji nie ma obecnie tej ścieżki, skrót zostanie automatycznie zaktualizowany, myśląc, że plik został przeniesiony na stałe. Powodowało to ciche awarie, dopóki nie odkryłem, co się dzieje. Do tej pory nie wiedziałem, że jest to funkcja skrótów Windows.

Więc moje pytanie jest proste. Czy jest jakiś sposób, aby wyłączyć tę funkcję? Globalnie jest dobre, ale lepsze byłoby rozwiązanie dla jednego skrótu.

Jednym z rozwiązań jest użycie pliku wsadowego zamiast skrótu, ale zastanawiam się, czy jest jakiś sposób, aby to działało, wciąż korzystając ze skrótu.

Korzystam z systemu Windows 10 Home i Windows 7 Home.

Kyle Delaney
źródło
10
W przeszłości korzystałem z pliku wsadowego ( .bat) za pomocą prostej komendy, np start "" "C:\path\to\file.exe".
Bob
1
Czy próbowałeś mklinkzamiast tego utworzyć dowiązanie symboliczne (za pomocą polecenia) .lnk? Czy te też się aktualizują?
JAB
1
Dowiązania symboliczne @JAB nie powinny być aktualizowane, ale mają pewne wady (wymagają uprawnień administratora, nie mogą przekazywać argumentów itp.). Chociaż działają dobrze, jeśli nie stanowią problemu.
Bob
3
Myślałem, że utworzenie skrótu tylko do odczytu zadziała (jestem pewien, że kiedyś), ale po przetestowaniu widzę, że nie działa. Wynika to z faktu, że skrót nie został przepisany; cel zostanie znaleziony po uruchomieniu skrótu. Tak, że nikt inny nie próbuje.
Chris H,
1
@ PetSerAl, jak powiedziałem powyżej, to nie działa.
Chris H

Odpowiedzi:

13

Możesz użyć PowerShell! Ten mały skrypt uderza plik LNK, aby uzyskać taki sam efekt, jak użycie klasycznego shortcutnarzędzia.

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

Aby go użyć, zapisz ten tekst jako .ps1plik, np notrack.ps1. Jeśli jeszcze tego nie zrobiłeś, postępuj zgodnie z instrukcjami w sekcji Włączanie skryptów wiki tagu PowerShell . Następnie możesz uruchomić go z wiersza polecenia programu PowerShell:

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

Skorygowane w ten sposób skróty nie zmienią się, gdy ich cel się poruszy. Jeśli taki skrót zostanie złamany, nic się nie stanie, gdy spróbujesz go otworzyć.

Zebrałem matematykę binarną zastosowaną w moim skrypcie z 48-stronicowego pliku PDF firmy Microsoft w formacie LNK .

Ben N.
źródło
25

Zatrzymaj i wyłącz usługę: Klient śledzenia łącza rozproszonego (TrkWks).

Rozproszone śledzenie łączy śledzi łącza w scenariuszach, w których łącze jest tworzone do pliku na woluminie NTFS, na przykład skróty powłoki. Jeśli nazwa tego pliku zostanie zmieniona, przeniesiona na inny wolumin na tym samym komputerze, przeniesiona na inny komputer lub przeniesiona w innych podobnych scenariuszach, system Windows używa rozproszonego śledzenia łącza do znalezienia pliku.

Źródło: Distributed Link Tracking - Wsparcie Microsoft

Steven
źródło
Dobry pomysł, ale zadziwiająco nie zadziałał. Skrót nadal znajdował plik, nawet jeśli ścieżka była dłuższa o jeden katalog.
Kyle Delaney,
Czy jesteś pewien, że usługa została zatrzymana? Po zatrzymaniu usługi DLTC przeniosłem plik wykonywalny lub zmieniłem jego nazwę. Po uruchomieniu skrótu pojawia się błąd „Problem ze skrótem” informujący o braku celu i monitujący o usunięcie skrótu.
Steven,
10
Funkcja „znajdź właściwy cel” pochodzi z serii Windows 9x i poprzedza wersje NT systemu Windows. DLT nie istniał w systemie Windows 9x. Nie oznacza to, że DLT nie ma znaczenia; Okna będą używać DLT czy to pomaga znaleźć cel skrótów.
MSalters,
2
@Steven Tak, jestem pewien, że usługa jest wyłączona. W systemie Windows 10 przeszedłem do usług, znalazłem klienta śledzenia łącza rozproszonego, kliknąłem przycisk zatrzymania, ponownie uruchomiłem komputer i ponownie sprawdziłem usługę. Jest przycisk Start, a usługa nie mówi o uruchomieniu. Skróty nadal się aktualizują.
Kyle Delaney,
8

Użyj shortcut.exepolecenia Opcja -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
źródło
4
Niestety shortcut.exe nie jest już łatwo dostępny.
Daniel B
@DanielB Masz rację, zapomniałem, że uratowałem shortcut.exe w niektórych wersjach systemu Windows.
Sunzi,
2
@Daniel czy wiesz, które wersje systemu Windows to mają? Może być przydatny dla niektórych osób.
gronostaj
1
Najwyraźniej jest to część zestawu Windows NT4 Server Resource Kit. Pierwotnie został udostępniony na płycie CD.
Daniel B
4

Możesz włączyć następujący obiekt zasad grupy:

Konfiguracja użytkownika \ Szablony administracyjne \ Menu Start i pasek zadań \ Nie używaj metody wyszukiwania podczas rozwiązywania skrótów powłoki

odpowiedni klucz rejestru: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Konfiguracja użytkownika \ Szablony administracyjne \ Menu Start i pasek zadań \ Nie używaj metody śledzenia podczas rozwiązywania skrótów powłoki

odpowiedni klucz rejestru:

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

Konfiguracja użytkownika \ Szablony administracyjne \ Składniki systemu Windows \ Eksplorator plików \ ​​Nie śledź skrótów powłoki podczas wędrowania

odpowiedni klucz rejestru: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo

Swisstone
źródło
Jak włączyć GPO? Gdzie znajdę konfigurację użytkownika?
Kyle Delaney,
w systemie Windows 10 możesz kliknąć prawym przyciskiem myszy przycisk Start -> Uruchom i napisać: gpedit.msc -> kliknij OK, wtedy będziesz mógł znaleźć konfigurację użytkownika itp. LUB LUB możesz utworzyć klucze rejestru, które określiłem ( Wpisz: DWORD, o wartości 1)
Swisstone,
Mam błąd. System Windows nie mógł znaleźć pliku gpedit.msc.
Kyle Delaney,
OK, więc musisz ręcznie utworzyć klucze w rejestrze. Jeśli nie wiesz, jak to zrobić, utworzyłem plik .reg, który możesz zaimportować: pastebin.com/KdPYFwff wystarczy skopiować i wkleić zawartość w nowym pliku, który musi kończyć się rozszerzeniem „.reg” (nie. txt) i kliknij dwukrotnie
Swisstone,
Dzięki. Zrobiłem to, ponownie uruchomiłem komputer i sprawdziłem, czy klucze rejestru są teraz na miejscu za pomocą regedit. Skróty nadal się aktualizują.
Kyle Delaney,