27

UNCパスをローカルドライブ文字にマップできることを知っています。ただし、UNCパスをローカルフォルダーにマップする方法があるかどうか疑問に思っています。プログラムにハードコードされた特定のフォルダーを持つプログラムがあり、ネットワーク共有からデータにアクセスできるように、UNCパスにマップされた同じ名前のフォルダーを作成してみたいと思っています。これは実行可能ですか?具体的には、これはWindows2003サーバー上にあります。

4

7 に答える 7

23

はい、UNCパスをローカルフォルダにマップする方法があります。

C:\>mklink /D Develop \\obsidian\Develop
symbolic link created for Develop <<===>> \\obsidian\Develop

これは、ビルドサーバーで自分のPCのDevelopフォルダーをフォルダーとして使用するためですDevelop

10/20/2012  11:01 AM    <SYMLINKD>     Develop [\\obsidian\Develop]

そして、あなたはそれを持っています。


MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

:私の実際の状況では、別のレベルのリダイレクトが必要でした。これは、使用しているプログラムが、リモートマシンを指すシンボリックリンクDevelopであることに気づき、準拠することを拒否したためです。私はプログラムに、ローカルリソースを指すジャンクションを与えることによって、シャットダウンして、言われたことを実行するように指示しました。

10/20/2012  11:06 AM    <JUNCTION>     Develop [C:\Develop2\]
10/20/2012  11:01 AM    <SYMLINKD>     Develop2 [\\obsidian\Develop]
于 2012-10-29T14:59:24.303 に答える
16

これは、OPが要求したもの、つまりネットワーク共有にマップされるWindows2003のシンボリックリンクを正確に満たしています。何時間も他の人を見てテストした後、これはネットワーク共有で動作することがわかった唯一のコンポーネントです。

WindowsXP用のシンボリックリンクドライバ

このユーティリティは、XPと2003の両方でネットワーク共有へのマッピングとシンボリックリンクの作成で機能します:http ://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

これをパスに配置したディレクトリに配置すると、senable.exe(with symlink.sys)とを使用してシンボリックリンクを作成できますln.exe(上記のサイトからも、Visual C ++ランタイムDLLへの依存関係とともに必要になります)。

追加ボーナス:MkLinkを偽造する

これらの追加の2つのファイルを同じディレクトリにsenable.exe配置し、これがすべてパス上にあることを確認します。

mklink.cmd:

@echo off

SET DIR=%~dp0%
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "& '%DIR%Symlink.ps1' %*"

pushd "%DIR%"
"%DIR%senable.exe" start
popd

Symlink.ps1:

param (
 [string]$symlinktype,
 [string]$link,
 [string]$target
)

$scriptpath = $MyInvocation.MyCommand.Path
$ScriptDir = Split-Path $scriptpath

$senable = Join-Path "$ScriptDir" senable.exe
$ln = Join-Path "$ScriptDir" ln.exe

pushd "$ScriptDir"
& cmd /c "$senable" install
popd
& cmd /c "$ln" -s "$target" "$link"

ノート:

Windows 2003にインストールされている他の次のアイテムが必要です(R2以外、R2に何が必要かはまだ完全にはわかりません)。

  • Microsoft .NET Framework 2.0 Service Pack 1
  • Windows Imaging Component
  • Windows Server 2003 Service Pack 2
  • Windows Management Framework Core(これにより、PowerShell 2が導入されます)

Chocolateyパッケージ

私はあなたのためにこれをすべて行うチョコレートのパッケージを作成しました:http://chocolatey.org/packages/win2003-mklink

重要な注意点

通常のシンボリックリンクとは異なり、単にフォルダを削除してシンボリックリンクフォルダを削除することはできません。これを行うと、それが指している実際のフォルダーが削除されます。したがって、細心の注意を払って使用してください。

于 2013-09-03T13:19:58.217 に答える
4

直接行うことはできませんが、シンボリックリンクを作成すると、マップされたドライブ文字を指すことができるはずです。

net use e: \\\\shares\folder#これを永続的に設定する必要があります。そうしないと、次に再起動すると機能しなくなります。

リンクが必要な場所を使用cmdして参照します。

cd c:\folder

mklink /d name e:\

これで、アクセスするものはすべてアクセスc:\folder\name\するようになります\\\\shares\folder\

于 2010-12-02T22:12:13.130 に答える
2

Microsoftによると、リモートマシン(サーバー)上の共有フォルダーをローカルフォルダーにマップすることはできません。

たとえば、これは機能しません。

  • サーバー上の共有フォルダー:\\\Server\share1
  • ローカルマシン上のマップされた共有:c:\MyProgram\Some_Useful_Files_Here

mklinkMicrosoftが述べたように、リモートマシンでは実行できません。少なくともJunctionまたはのためではありませんHard-linksSymbolic基本的にショートカットであるリンクとしてのみ実行できます。

したがって、特定のプログラムがサーバー上と同じローカルフォルダーにアクセスする必要がある場合は、申し訳ありません。WindowsはLinuxではありません。忘れないでください:-(

于 2013-06-22T18:02:13.180 に答える
1

直接マッピングすることはできません。ファイルシステムの一部として登録されているシェル名前空間拡張機能を実装して、必要な場所にルート化してから、内部でUNCパスにアクセスできるようにすることができます。実装するのは簡単なことではありませんが、探している最終結果が得られるはずです。

于 2010-12-02T20:20:08.507 に答える
0

にマップする必要\\moo\cowC:\cow_filesあり、mooというサーバーがまだ存在しないと仮定すると(存在する場合は、フォルダーを直接共有できるため、存在しないと想定します)、次のことができます。

  1. ホストファイル(または可能であれば実際のDNS)を編集して、そのファイルが含まmooれるマシンにマップしC:\cow_filesます。(または、ディレクトリがマッピングを必要とするクライアントに対してローカルである場合は、localhostに送信します。)

  2. そのマシンで共有C:\cow_filesします。cow

\\moo\cowそうすれば、私が何かを見逃していない限り、必要なファイルにマップして取得できるはずです(これは可能です:))。

于 2010-12-02T23:25:38.090 に答える
0

何度も試してみた結果、思い通りにできないことがようやくわかりました。mklinkServer 2008の機能を使用してシンボリックリンクを試しましたが、 System.IO.NETAPIがシンボリックリンクを認識しないことがわかりました。

したがって、Directory.GetFiles()シンボリックにリンクされているフォルダでを実行すると、エラーがスローされます。

于 2010-12-15T17:35:32.360 に答える