有没有办法将UNC路径映射到Windows 2003上的本地文件夹?

有没有办法将UNC路径映射到Windows 2003上的本地文件夹?,windows,path,local,unc,Windows,Path,Local,Unc,我知道我可以将UNC路径映射到本地驱动器号。但是,我想知道是否有办法将UNC路径映射到本地文件夹。我有一个程序,其中有一个硬编码到程序中的特定文件夹,我想尝试创建一个同名文件夹,该文件夹映射到UNC路径,以便可以从网络共享访问数据。这可行吗?具体来说,这是在Windows 2003服务器上。您不能直接映射它,不可以。您可以尝试实现注册为文件系统一部分的Shell命名空间扩展,以便您可以在需要的地方将其根目录,然后让它在内部访问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的服务器(如果有,您可以直接共享文件夹,所以我假设没有),您可以:

  • 编辑主机文件(或您的实际DNS,如果可以)以将
    moo
    映射到其上有
    C:\cow\u文件的机器。(如果目录是需要映射的客户端的本地目录,则为localhost。)

  • C:\cow\u文件作为
    cow
    在该机器上共享


  • 然后,您应该能够映射到
    \\moo\cow
    并获取所需的文件,除非我错过了一些东西(这是可能的:)。

    经过多次尝试,我终于发现您无法按我想要的方式完成。我在Server2008中尝试了使用
    mklink
    功能的符号链接,但结果表明.NET
    System.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"