Wie verhindere ich, dass eine Windows-Verknüpfung ihren Pfad aktualisiert?

24

Während der Entwicklung meines Produkts sind auf meinem Testgerät mehrere Versionen der Anwendung gleichzeitig installiert. Um jedoch die absoluten Pfade zu erhalten, die meine Anwendung für die Arbeit verwendet, muss ich die Ordner auslagern oder umbenennen, damit die zu testende Version beispielsweise den richtigen Pfad hat C:\Program Files\My Company\My App\My App.exe. Ich habe eine Verknüpfung erstellt, die auf diesen Pfad abzielt. Wenn diese Verknüpfung jedoch geöffnet wird, wenn derzeit keine der Versionen über diesen Pfad verfügt, wird die Verknüpfung automatisch aktualisiert, da angenommen wird, dass die Datei dauerhaft verschoben wurde. Dies verursachte stille Fehler, bis ich entdeckte, was geschah. Ich wusste bis jetzt nicht, dass dies eine Funktion von Windows-Verknüpfungen ist.

Meine Frage ist also einfach. Gibt es eine Möglichkeit, diese Funktion zu deaktivieren? Global ist gut, aber eine per-Shortcut-Lösung wäre besser.

Die Verwendung einer Batch-Datei anstelle einer Verknüpfung ist eine Lösung, aber ich frage mich, ob es eine Möglichkeit gibt, diese Funktion zu nutzen, während noch eine Verknüpfung verwendet wird.

Ich verwende Windows 10 Home und Windows 7 Home.

Kyle Delaney
quelle
10
Was ich in der Vergangenheit getan habe, ist die Verwendung einer Batch-Datei ( .bat) mit einem einfachen Befehl, z start "" "C:\path\to\file.exe".
Bob
1
Haben Sie versucht, mklinkstatt einer .lnkDatei einen symbolischen Link (mithilfe des Befehls) zu erstellen? Oder werden diese auch aktualisiert?
JAB
1
@JAB-Symlinks sollten nicht aktualisiert werden, haben jedoch bestimmte Nachteile (erfordern Administratorrechte, können keine Argumente übergeben usw.). Obwohl sie gut funktionieren, wenn diese kein Problem sind.
Bob
3
Ich dachte, die Verknüpfung schreibgeschützt zu machen, würde funktionieren (ich bin mir sicher, dass es früher so war), aber nach dem Testen stelle ich fest, dass dies nicht der Fall ist. Dies liegt daran, dass die Verknüpfung nicht neu geschrieben wird. Das Ziel wird gefunden, wenn die Verknüpfung ausgeführt wird. Nur damit es niemand anders versucht.
Chris H
1
@PetSerAl wie gesagt, das geht nicht.
Chris H

Antworten:

13

Sie können PowerShell verwenden! Dieses kleine Skript bearbeitet die LNK-Datei, um den gleichen Effekt wie mit dem klassischen shortcutDienstprogramm zu erzielen .

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

Um es zu verwenden, speichern Sie diesen Text als .ps1Datei, z notrack.ps1. Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen im Abschnitt "Aktivieren von Skripten" des PowerShell-Tag-Wikis . Dann können Sie es an einer PowerShell-Eingabeaufforderung ausführen:

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

Verknüpfungen, die auf diese Weise optimiert wurden, ändern sich nicht, wenn sich ihr Ziel bewegt. Wenn eine Verknüpfung wie diese unterbrochen wird, passiert beim Versuch, sie zu öffnen, überhaupt nichts.

Ich habe die in meinem Skript verwendete binäre Mathematik aus diesem 48-seitigen Microsoft PDF-Dokument im LNK-Format zusammengestellt .

Ben N
quelle
25

Beenden und deaktivieren Sie den Dienst: Distributed Link Tracking Client (TrkWks).

Distributed Link Tracking verfolgt Links in Szenarien, in denen die Verknüpfung zu einer Datei auf einem NTFS-Volume hergestellt wird, z. B. Shell-Verknüpfungen. Wenn diese Datei umbenannt, auf ein anderes Volume auf demselben Computer verschoben, auf einen anderen Computer verschoben oder in einem ähnlichen Szenario verschoben wird, verwendet Windows die verteilte Linkverfolgung, um die Datei zu finden.

Quelle: Distributed Link Tracking - Microsoft-Support

Steven
quelle
Gute Idee, aber merkwürdigerweise hat es nicht funktioniert. Die Verknüpfung hat die Datei auch dann gefunden, wenn der Pfad ein Verzeichnis länger war.
Kyle Delaney
Sind Sie sicher, dass der Dienst beendet wurde? Nach dem Beenden des DLTC-Dienstes habe ich die ausführbare Datei verschoben oder umbenannt. Beim Ausführen der Verknüpfung wurde die Fehlermeldung "Problem mit Verknüpfung" angezeigt, dass das Ziel fehlt, und die Aufforderung, die Verknüpfung zu löschen.
Steven
10
Die Funktion "Das richtige Ziel finden" stammt aus der Windows 9x-Reihe und ist älter als die NT-Versionen von Windows. DLT war unter Windows 9x nicht vorhanden. Das heißt nicht, dass DLT irrelevant ist. Windows wird DLT verwenden , wenn das hilft ein Verknüpfungsziel zu finden.
MSalters
2
@Steven Ja, ich bin sicher, dass der Dienst deaktiviert ist. In Windows 10 ging ich zu Dienste, fand Distributed Link Tracking Client, klickte auf die Schaltfläche zum Beenden, startete meinen Computer neu und überprüfte den Dienst erneut. Es gibt einen Startknopf und der Dienst sagt nicht, dass er läuft. Verknüpfungen aktualisieren sich weiterhin.
Kyle Delaney
8

Verwenden Sie den shortcut.exeBefehl 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
quelle
4
Leider ist shortcut.exe nicht mehr verfügbar.
Daniel B
@DanielB Sie haben Recht, ich habe vergessen, dass ich shortcut.exe über einige Windows-Versionen gerettet habe.
Sunzi
2
@ Daniel wissen Sie, welche Versionen von Windows es haben? Es könnte für einige Leute nützlich sein.
Gronostaj
1
Es ist anscheinend Teil des Windows NT4 Server Resource Kit. Es wurde ursprünglich auf CD zur Verfügung gestellt.
Daniel B
4

Sie können das folgende Gruppenrichtlinienobjekt aktivieren:

Benutzerkonfiguration \ Administrative Vorlagen \ Startmenü und Taskleiste \ Verwenden Sie beim Auflösen von Shell-Verknüpfungen nicht die suchbasierte Methode

entsprechender Registrierungsschlüssel: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Benutzerkonfiguration \ Administrative Vorlagen \ Startmenü und Taskleiste \ Verwenden Sie beim Auflösen von Shell-Verknüpfungen nicht die Tracking-basierte Methode

entsprechender Registrierungsschlüssel:

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

Benutzerkonfiguration \ Administrative Vorlagen \ Windows-Komponenten \ Datei-Explorer \ Verfolgen Sie während des Roamings keine Shell-Verknüpfungen

entsprechender Registrierungsschlüssel: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo

Swisstone
quelle
Wie aktiviere ich ein Gruppenrichtlinienobjekt? Wo finde ich die Benutzerkonfiguration?
Kyle Delaney
Unter Windows 10 können Sie mit der rechten Maustaste auf die Startschaltfläche klicken -> Ausführen und schreiben: gpedit.msc -> Klicken Sie auf OK, um die Benutzerkonfiguration usw. zu finden. ODER Sie können die von mir angegebenen Registrierungsschlüssel erstellen ( Typ: DWORD, mit einem Wert von 1)
Swisstone
Ich habe einen Fehler bekommen. Windows konnte gpedit.msc nicht finden.
Kyle Delaney
OK, Sie müssen die Schlüssel also manuell in der Registrierung erstellen. Wenn Sie nicht wissen , wie das zu tun, habe ich eine REG - Datei , die Sie importieren können: pastebin.com/KdPYFwff nur copy-paste den Inhalt in einer neuen Datei , die mit dem „REGEN“ -Erweiterung enden muss (nicht. txt) und doppelklicken Sie darauf
Swisstone
Vielen Dank. Ich habe es getan, meinen Computer neu gestartet und mit regedit überprüft, ob die Registrierungsschlüssel jetzt vorhanden sind. Verknüpfungen aktualisieren sich weiterhin.
Kyle Delaney