web-dev-qa-db-ja.com

Windowsシンボリックリンクと作業ディレクトリ

apps/myapp/と他のいくつかのdllを使用するファイルmyapp.exeを含むmyapp.dllというディレクトリがあります。

Linuxで行うように、これをディレクトリにシンボリックリンクしたいとします。

bin/myapp.exe => verylongpath/myapp/myapp.exe。つまり、mklink bin/myapp.exe verylongpath/bin/myapp.exeを使用します

Myappを実行すると、dllが見つからないと叫んでいます。これは、exeがそれ自体の作業ディレクトリに対して実行されないことを意味します。それは私を悲しくさせます。

どういうわけか私はそれをints自身の作業ディレクトリで実行させることができますか?ありがとう!

4
Emile

おそらく行う必要があるのは、EXEファイル自体ではなく、アプリケーションバイナリを含むフォルダをシンボリックリンクすることです。 Windowsでディレクトリシンボリックリンクを作成するための最も互換性のある方法は、ジャンクションポイントを使用することです。

次のコマンドを使用します。

mklink /J ..\link\target\dir linkdirname

ターゲットへのパスは、現在の場所を基準にすることができます。ドライブ文字から始める必要はありません。

これが完了すると、linkdirnameにCDを挿入して、通常どおりアプリケーションを実行できるようになります。

参考:ディレクトリシンボリックリンクに/ Dオプションを使用することもできますが、私の経験では、ジャンクションポイントがはるかに優れた(そしてより互換性のある)方法で動作することがわかりました。一部のアプリケーションは、ディレクトリのシンボリックリンクにだまされませんが、ジャンクションで問題なく動作します。たとえば、Steamでは、ジャンクションを使用してゲームフォルダーを再ルーティングできますが、ディレクトリシンボリックリンクを使用することはできません。

2
Adambean

myapp.batlinkの代わりに)を作成し、以下のコマンドを書き込むことができます:

call "absolute\path\of\your\excecutable" %*

例:

@call "C:\Program Files (x86)\GnuWin32\bin\openssl.exe" %*

上記の行をopenssl.batショートカットが必要な場所に保存します。

0
Mir-Ismaili