有没有办法将UNC路径映射到Windows 2003上的本地文件夹?
我知道我可以将UNC路径映射到本地驱动器号。但是,我想知道是否有办法将UNC路径映射到本地文件夹。我有一个程序,其中有一个硬编码到程序中的特定文件夹,我想尝试创建一个同名文件夹,该文件夹映射到UNC路径,以便可以从网络共享访问数据。这可行吗?具体来说,这是在Windows 2003服务器上。您不能直接映射它,不可以。您可以尝试实现注册为文件系统一部分的Shell命名空间扩展,以便您可以在需要的地方将其根目录,然后让它在内部访问UNC路径。这不是一件容易实现的小事,但它应该会给您带来您想要的最终结果。您不能直接执行此操作,但如果创建符号链接,您应该能够将其指向映射的驱动器号有没有办法将UNC路径映射到Windows 2003上的本地文件夹?,windows,path,local,unc,Windows,Path,Local,Unc,我知道我可以将UNC路径映射到本地驱动器号。但是,我想知道是否有办法将UNC路径映射到本地文件夹。我有一个程序,其中有一个硬编码到程序中的特定文件夹,我想尝试创建一个同名文件夹,该文件夹映射到UNC路径,以便可以从网络共享访问数据。这可行吗?具体来说,这是在Windows 2003服务器上。您不能直接映射它,不可以。您可以尝试实现注册为文件系统一部分的Shell命名空间扩展,以便您可以在需要的地方将其根目录,然后让它在内部访问UNC路径。这不是一件容易实现的小事,但它应该会给您带来您想要的最终结
net使用e:\\\\\shares\folder
\您需要将此设置为永久性,否则下次重新启动将中断此设置
使用cmd
浏览到您想要链接的位置:
cd c:\文件夹
mklink/d名称e:\
现在任何访问
c:\folder\name\
的东西都将访问\\\shares\folder\
假设您想将\\moo\cow
映射到c:\cow\u文件
,并且还没有一个名为moo的服务器(如果有,您可以直接共享文件夹,所以我假设没有),您可以:
moo
映射到其上有C:\cow\u文件的机器。(如果目录是需要映射的客户端的本地目录,则为localhost。)
C:\cow\u文件作为cow
在该机器上共享
然后,您应该能够映射到
\\moo\cow
并获取所需的文件,除非我错过了一些东西(这是可能的:)。经过多次尝试,我终于发现您无法按我想要的方式完成。我在Server2008中尝试了使用mklink
功能的符号链接,但结果表明.NETSystem.IO
api无法识别符号链接
因此,如果对符号链接的文件夹执行
目录.GetFiles()
,将抛出错误。是的,有一种方法可以将UNC路径映射到本地文件夹:
C:\>mklink /D Develop \\obsidian\Develop
symbolic link created for Develop <<===>> \\obsidian\Develop
就在这里
注意:在我的实际情况下,我需要另一个级别的重定向,因为我使用的程序意识到
develope
是一个符号链接,指向一台远程机器,并拒绝遵守。我告诉程序闭嘴,按命令做,给它一个指向本地资源的连接点
10/20/2012 11:06 AM <JUNCTION> Develop [C:\Develop2\]
10/20/2012 11:01 AM <SYMLINKD> Develop2 [\\obsidian\Develop]
2012年10月20日上午11:06开发[C:\Develop2\]
2012年10月20日上午11:01开发2[\\黑曜石\开发]
根据Microsoft,您无法将远程计算机(服务器)上的共享文件夹映射到本地文件夹
例如,这将不起作用:
- 服务器上的共享文件夹:
\\\Server\share1
- 本地计算机上的映射共享:
c:\MyProgram\此处的一些有用文件
mklink
;至少不适用于连接
或硬链接
。您只能通过符号链接来完成,这基本上是一种快捷方式
因此,如果某个程序需要访问与服务器上相同的本地文件夹,对不起,运气不好!Windows不是Linux,我们不要忘记:-(这正符合OP的要求-一个映射到网络共享的Windows 2003的符号链接。在查看其他组件并测试它们很多小时后,我发现这是唯一一个可用于网络共享的组件
Windows XP的符号链接驱动程序
此实用程序适用于XP和2003映射到网络共享并创建符号链接:
现在把它放在路径上的目录中,你可以使用<代码> SENDIABLE。exe < /C> >(与<代码> SyLink .sys <代码> >和<代码> LN.exe < /C> >(你将需要从上面的站点来,以及它依赖于Visual C++运行时DLL)。
额外的好处:伪造MkLink
将这两个附加文件放在您拥有senable.exe
的同一目录中,并确保这些文件都在路径上
mklink.cmd:
Symlink.ps1:
注:
您需要在Windows 2003上安装以下其他项目(非R2,我还不完全确定R2需要什么):
- Microsoft.NET Framework 2.0 Service Pack 1
- Windows图像组件
- Windows Server 2003 Service Pack 2
- Windows管理框架核心(这带来了PowerShell 2)
巧克力包装
我创建了一个巧克力包,可以为您完成所有这些:
重要提示
不同于常规的Syrink,你不能简单地删除文件夹来删除符号链接文件夹。如果你这样做,它将删除它指向的真正文件夹。所以使用极端小心。
使用该方法,你需要考虑应用程序最终会运行的上下文。映射的驱动器可以根据用户的不同而不同。r、 并且可能不适用于服务帐户,具体取决于您的环境。您是否检查以确保为符号链接评估启用了适当的设置:fsutil行为查询SymlinkEvaluation
您可能只需要根据符号链接的配置启用其中一些设置。例如fsutil行为集SymlinkEvaluation R2R:1
这是错误的-看看我的答案,在Win 7 64位上.Net 3.5中的System.IO.Directory.GetFiles(“C:\whater\MySymbolicLink”)与使用“mklink/d C:\whater\MySymbolicLink some target path”创建的符号链接可以正常工作。您检查到了吗
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.
10/20/2012 11:06 AM <JUNCTION> Develop [C:\Develop2\]
10/20/2012 11:01 AM <SYMLINKD> Develop2 [\\obsidian\Develop]
@echo off
SET DIR=%~dp0%
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "& '%DIR%Symlink.ps1' %*"
pushd "%DIR%"
"%DIR%senable.exe" start
popd
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"