Search code examples
windowspathlocalunc

Is there a way to map a UNC path to a local folder on Windows 2003?


I know that I can map a UNC path to a local drive letter. However, I am wondering if there is a way to map a UNC path to a local folder. I have a program that has a specific folder hard coded into the program and I am wanting to try and create a folder with the same name that is mapped to a UNC path so that the data can be accessed from a network share. Is this doable? Specifically this is on a Windows 2003 server.


Solution

  • This meets exactly what the OP asked for - a symbolic link for Windows 2003 that maps to a network share. After many hours looking at others and testing them, this is the only component I found that will work with network shares.

    Symbolic Link Driver for Windows XP

    This utility will work for both XP and 2003 mapping to a network share and creating a symlink: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

    Now put this in a directory that you put on the path and you have the ability to create symlinks using senable.exe (with symlink.sys) and ln.exe (you will need that from the above site as well along with its dependency on the Visual C++ runtime DLLs).

    Added Bonus: Fake out MkLink

    Put these additional two files into the same directory where you have senable.exe and make sure this is all on the path.

    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"
    

    Note:

    You need the following other items installed on Windows 2003 (non-R2, I'm not fully sure what you need for R2 yet):

    • Microsoft .NET Framework 2.0 Service Pack 1
    • Windows Imaging Component
    • Windows Server 2003 Service Pack 2
    • Windows Management Framework Core (this brings PowerShell 2)

    Chocolatey Package

    I created a chocolatey package that will do all of this for you: http://chocolatey.org/packages/win2003-mklink

    Important Note

    Unlike regular symlinks, you can not simply delete the folder to remove the symbolic link folder. If you do that, it will delete the real folder it it pointing to. So use with extreme care.