Bagaimana cara menghentikan pintasan Windows dari memperbarui jalurnya?

24

Saat mengembangkan produk saya, perangkat pengujian saya memiliki beberapa versi aplikasi yang diinstal secara bersamaan. Namun, untuk mendapatkan jalur absolut yang digunakan aplikasi saya untuk berfungsi, saya harus mengganti atau mengganti nama folder sehingga versi yang ingin saya uji memiliki jalur yang benar, katakanlah C:\Program Files\My Company\My App\My App.exe. Saya telah membuat jalan pintas yang menargetkan jalur ini, tetapi jika jalan pintas ini dibuka ketika tidak ada versi saat ini yang memiliki jalur tersebut maka jalan pintas akan secara otomatis memperbarui sendiri, mengira file telah pindah secara permanen. Ini menyebabkan kegagalan diam sampai saya menemukan apa yang terjadi. Saya tidak tahu ini adalah fitur cara pintas Windows sampai sekarang.

Jadi pertanyaan saya sederhana. Apakah ada cara untuk mematikan fitur ini? Secara global bagus tetapi solusi per-pintas akan lebih baik.

Menggunakan file batch daripada pintasan adalah salah satu solusi, tapi saya bertanya-tanya apakah ada cara untuk membuat ini berfungsi saat masih menggunakan pintasan.

Saya menggunakan Windows 10 Home dan Windows 7 Home.

Kyle Delaney
sumber
10
Apa yang saya lakukan di masa lalu adalah menggunakan file batch ( .bat) dengan perintah sederhana, mis start "" "C:\path\to\file.exe".
Bob
1
Sudahkah Anda mencoba membuat tautan simbolik (menggunakan mklinkperintah) alih- .lnkalih file? Atau apakah itu diperbarui juga?
JAB
1
@JAB symlink tidak boleh diperbarui, tetapi memiliki kelemahan tertentu (memerlukan admin privs, tidak dapat melewati argumen, dll.). Meskipun mereka bekerja dengan baik jika itu bukan masalah.
Bob
3
Saya pikir membuat pintasan read-only akan bekerja (saya yakin dulu) tetapi setelah diuji saya melihat itu tidak. Ini karena pintasan tidak ditulis ulang; target ditemukan saat pintasan dijalankan. Jadi tidak ada yang mencoba.
Chris H
1
@PetSerAl seperti yang saya katakan di atas, itu tidak berhasil.
Chris H

Jawaban:

13

Anda dapat menggunakan PowerShell! Skrip kecil ini memukul file LNK untuk menghasilkan efek yang sama seperti menggunakan shortcututilitas klasik .

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

Untuk menggunakannya, simpan teks itu sebagai .ps1file, mis notrack.ps1. Jika Anda belum melakukannya, ikuti instruksi di bagian Skrip yang Mengaktifkan wiki tag PowerShell . Kemudian Anda dapat menjalankannya dari prompt PowerShell:

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

Pintasan yang diubah dengan cara ini tidak akan berubah ketika target bergerak. Jika pintasan seperti ini rusak, tidak ada sama sekali yang akan terjadi ketika Anda mencoba membukanya.

Saya mengumpulkan matematika biner yang digunakan dalam skrip saya dari Microsoft PDF 48 halaman ini dalam format LNK .

Ben N
sumber
25

Hentikan dan nonaktifkan layanan: Klien Pelacakan Tautan Terdistribusi (TrkWks).

Pelacakan Tautan Terdistribusi melacak tautan dalam skenario di mana tautan dibuat ke file pada volume NTFS, seperti pintasan shell. Jika file itu diganti namanya, dipindahkan ke volume lain di komputer yang sama, pindah ke komputer lain, atau pindah dalam skenario serupa lainnya, Windows menggunakan Pelacakan Tautan Terdistribusi untuk menemukan file.

Sumber: Pelacakan Tautan Terdistribusi - Dukungan Microsoft

Steven
sumber
Gagasan bagus, tetapi sangat tidak berhasil. Jalan pintas masih menemukan file bahkan ketika jalan satu direktori lebih lama.
Kyle Delaney
Apakah Anda yakin layanan dihentikan? Setelah menghentikan layanan DLTC, saya memindahkan atau mengganti nama executable. Ketika saya menjalankan pintasan, saya mendapatkan kesalahan "Masalah dengan Pintasan" yang mengatakan bahwa target tidak ada dan meminta untuk menghapus pintasan.
Steven
10
Fungsionalitas "temukan target yang tepat" berasal dari seri Windows 9x, dan ada sebelum Windows versi NT. DLT tidak ada di Windows 9x. Itu tidak berarti DLT tidak relevan; Windows akan menggunakan DLT jika itu membantu menemukan target pintasan.
MSalters
2
@ Sebelas Ya, saya yakin layanannya dimatikan. Di Windows 10, saya masuk ke Layanan, menemukan Distributed Link Tracking Client, mengklik tombol stop, me-restart komputer saya, dan memeriksa layanan lagi. Ada tombol Mulai dan layanan tidak mengatakan berjalan. Pintasan masih memperbarui sendiri.
Kyle Delaney
8

Gunakan shortcut.exeOpsi perintah -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
sumber
4
Sayangnya, shortcut.exe tidak lagi tersedia.
Daniel B
@DanielB Anda benar, saya lupa bahwa saya telah menyelamatkan shortcut.exe pada beberapa Versi Windows.
Sunzi
2
@Aniel, tahukah Anda versi Windows yang mana yang memilikinya? Ini bisa bermanfaat bagi sebagian orang.
gronostaj
4

Anda dapat mengaktifkan GPO berikut:

Konfigurasi Pengguna \ Template Administratif \ Menu Mulai dan Bilah Tugas \ Jangan gunakan metode berbasis pencarian saat menyelesaikan pintasan shell

kunci registri yang sesuai: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

Konfigurasi Pengguna \ Template Administratif \ Menu Mulai dan Bilah Tugas \ Jangan gunakan metode berbasis pelacakan saat menyelesaikan pintasan shell

kunci registri yang sesuai:

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

Konfigurasi Pengguna \ Template Administratif \ Komponen Windows \ File Explorer \ Jangan melacak pintasan shell saat roaming

kunci registri yang sesuai: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo

Batu Swis
sumber
Bagaimana cara saya mengaktifkan GPO? Di mana saya menemukan Konfigurasi Pengguna?
Kyle Delaney
pada windows 10 Anda dapat mengklik kanan pada tombol mulai -> Jalankan dan tulis: gpedit.msc -> klik OK, maka Anda akan dapat menemukan konfigurasi Pengguna, dll ... ATAU Anda dapat membuat kunci registri yang saya tentukan ( Jenis: DWORD, dengan nilai 1)
Swisstone
Saya mendapat kesalahan. Windows tidak dapat menemukan gpedit.msc.
Kyle Delaney
OK, jadi Anda harus membuat kunci secara manual di registri. Jika Anda tidak tahu bagaimana melakukannya, saya membuat file .reg yang dapat Anda impor: pastebin.com/KdPYFwff cukup salin-tempel konten di file baru yang harus diakhiri dengan ekstensi ".reg" (bukan. txt) dan klik dua kali
Swisstone
Terima kasih. Saya melakukannya, menyalakan kembali komputer saya, dan memverifikasi bahwa kunci registri sekarang sudah ada menggunakan regedit. Pintasan masih memperbarui sendiri.
Kyle Delaney