Windowsショートカットのパスの更新を停止するにはどうすればよいですか?


24

製品の開発中に、テストデバイスには複数のバージョンのアプリケーションが同時にインストールされています。ただし、アプリケーションが動作するために使用している絶対パスを取得するには、テストするバージョンが正しいパスになるようにフォルダーを切り替えるか、名前を変更する必要がありますC:\Program Files\My Company\My App\My App.exe。このパスをターゲットとするショートカットを作成しましたが、現在そのパスを持っているバージョンがない場合にこのショートカットを開くと、ファイルが永久に移動したと見なして、ショートカットが自動的に更新されます。何が起こっているのかを発見するまで、これはサイレント障害を引き起こしました。これが今までWindowsショートカットの機能だとは知りませんでした。

だから私の質問は簡単です。この機能をオフにする方法はありますか?グローバルに良いですが、ショートカットごとのソリューションが良いでしょう。

ショートカットの代わりにバッチファイルを使用することも1つの解決策ですが、ショートカットを使用したままでこの機能を使用する方法はないのでしょうか。

Windows 10 HomeとWindows 7 Homeを使用しています。


10
過去にやったことは、バッチファイル(.bat)を単純なコマンドで使用することですstart "" "C:\path\to\file.exe"
ボブ

1
mklink代わりに.lnkファイルの代わりにシンボリックリンクを(コマンドを使用して)作成しようとしましたか?または、それらも更新されますか?
-JAB

1
@JABシンボリックリンクは更新されるべきではありませんが、特定の欠点があります(管理者特権が必要、引数を渡せないなど)。それらが問題でなければそれらはうまく働くけれども。
ボブ

3
ショートカットを読み取り専用にすることはうまくいくと思っていました(以前はそうだったと思います)が、テストを行ったところ、うまくいかないことがわかりました。これは、ショートカットが書き換えられないためです。ショートカットの実行時にターゲットが見つかります。だから誰も試していない。
クリスH

1
先ほど言ったように、@ PetSerAlは機能しません。
クリスH

回答:


13

PowerShellを使用できます!この小さなスクリプトは、LNKファイルを強打して、クラシックshortcutユーティリティを使用するのと同じ効果を生成します。

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

それを使用するには、そのテキストを.ps1ファイルとして保存しますnotrack.ps1。まだ行っていない場合は、PowerShellタグwikiのスクリプトの有効化セクションの手順に従ってください。次に、PowerShellプロンプトから実行できます。

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

この方法で調整されたショートカットは、ターゲットが移動しても変更されません。このようなショートカットが壊れた場合、それを開こうとしても何も起こりません。

LNK形式のこの48ページのMicrosoft PDFから、スクリプトで使用されているバイナリ数学を集めました。


25

サービスを停止して無効にします:分散リンク追跡クライアント(TrkWks)。

分散リンクトラッキングは、シェルショートカットなど、NTFSボリューム上のファイルにリンクが作成されるシナリオでリンクを追跡します。そのファイルの名前が変更された場合、同じコンピューター上の別のボリュームに移動された場合、別のコンピューターに移動された場合、または同様のシナリオで移動された場合、Windowsは分散リンクトラッキングを使用してファイルを見つけます。

ソース:分散リンクトラッキング-マイクロソフトサポート


良い考えですが、驚くほどうまくいきませんでした。パスが1つのディレクトリより長い場合でも、ショートカットはファイルを見つけました。
カイルデラニー

サービスが停止されていますか?DLTCサービスを停止した後、実行可能ファイルを移動または名前変更しました。ショートカットを実行すると、「ショートカットの問題」エラーが発生しました。ターゲットが見つからないというメッセージが表示され、ショートカットを削除するように求められます。
スティーブン

10
「正しいターゲットを見つける」機能は、Windows 9xシリーズにまでさかのぼり、WindowsのNTバージョンよりも前のものです。DLTはWindows 9xには存在しませんでした。それは、DLTが無関係であると言っているわけではありません。Windows 、ショートカットターゲットを見つけるのに役立つ場合、DLT 使用します。
–MSalters

2
@Stevenはい、サービスがオフになっていると確信しています。Windows 10では、サービスに移動し、Distributed Link Tracking Clientを見つけ、停止ボタンをクリックし、コンピューターを再起動して、サービスを再度確認しました。[スタート]ボタンがあり、サービスは実行中と表示しません。ショートカットは引き続き更新されます。
カイルデラニー

8

shortcut.exeコマンドオプションを使用します-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
悲しいことに、shortcut.exeはすぐに利用できなくなりました。
ダニエルB

@DanielBそうですね、Windowsのいくつかのバージョンでshortcut.exeをレスキューしたことを忘れました。
スンジ

2
@ダニエルは、Windowsのどのバージョンがそれを持っているか知っていますか?一部の人にとっては便利かもしれません。
グロノスタジ


4

次のGPOを有効にできます。

ユーザーの構成\管理用テンプレート\スタートメニューおよびタスクバー\シェルショートカットを解決するときに検索ベースの方法を使用しない

対応するレジストリキー: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoResolveSearch

ユーザーの構成\管理用テンプレート\スタートメニューおよびタスクバー\シェルショートカットを解決するときに追跡ベースの方法を使用しない

対応するレジストリキー:

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

ユーザーの構成\管理用テンプレート\ Windowsコンポーネント\エクスプローラー\ローミング中にシェルショートカットを追跡しない

対応するレジストリキー: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\LinkResolveIgnoreLinkInfo


GPOを有効にするにはどうすればよいですか?ユーザー設定はどこにありますか?
カイルデラニー

Windows 10では、スタートボタンを右クリック->実行して書き込み:gpedit.msc-> OKをクリックすると、ユーザー設定などを見つけることができます...または、指定したレジストリキーを作成できます(タイプ:DWORD、値は1)
-Swisstone

エラーが発生しました。Windowsはgpedit.mscを見つけることができませんでした。
カイルデラニー

OK、レジストリでキーを手動で作成する必要があります。方法がわからない場合は、インポート可能な.regファイルを作成しました。pastebin.com/ KdPYFwffは、拡張子が「.reg」ではなく、「。reg」で終わる新しいファイルにコンテンツをコピーして貼り付けます。 txt)そしてそれをダブルクリック
-Swisstone

ありがとう。それを行い、コンピューターを再起動し、レジストリキーがregeditを使用して適切に配置されたことを確認しました。ショートカットは引き続き更新されます。
カイルデラニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.