example windows path local unc

windows - example - local path to unc



¿Hay alguna forma de asignar una ruta UNC a una carpeta local en Windows 2003? (7)

Sé que puedo asignar una ruta UNC a una letra de unidad local. Sin embargo, me pregunto si hay una manera de asignar una ruta UNC a una carpeta local. Tengo un programa que tiene una carpeta específica codificada en el programa y quiero intentar crear una carpeta con el mismo nombre que se asigna a una ruta UNC para poder acceder a los datos desde un recurso compartido de red. ¿Es esto factible? Específicamente esto es en un servidor Windows 2003.


De acuerdo con Microsoft, NO PUEDE asignar una carpeta compartida en una máquina remota (servidor) a una carpeta local. Por ejemplo:

  • Carpeta compartida en el servidor: // Server / share1
  • recurso compartido asignado en una máquina local: c: / MyProgram / Some_Useluf_Files_Here

Esto no funcionará! Como Microsoft declaró, NO PUEDES hacer mklink en una máquina remota al menos no para Junction o Hard-links . SOLO puede hacerlo como un enlace simbólico que es básicamente un acceso directo. Entonces, si un determinado programa necesita acceso a una carpeta local que es la misma que en el servidor ... ¡perdón, no hay suerte! Windows no es Linux, no lo olvidemos :-(


Después de mucho intentarlo, finalmente me di cuenta de que no puedes hacerlo como quería. Probé un enlace simbólico utilizando la funcionalidad mklink en Server 2008, pero resulta que la API .NET System.IO no reconoce los enlaces simbólicos. Por lo tanto, si haces un Directory.GetFiles () en una carpeta que está simbólicamente vinculada, se generará un error.


Esto cumple exactamente lo que solicitó el OP: un enlace simbólico para Windows 2003 que se asigna a un recurso compartido de red. Después de muchas horas mirando a otros y probándolos, este es el único componente que encontré que funcionará con recursos compartidos de red.

Controlador de enlace simbólico para Windows XP

Esta utilidad funcionará para la asignación de XP y 2003 a un recurso compartido de red y crear un enlace simbólico: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

Ahora coloque esto en un directorio que coloque en la ruta y tendrá la capacidad de crear enlaces simbólicos utilizando senable.exe (con symlink.sys ) y ln.exe (lo necesitará del sitio anterior también junto con su dependencia de las DLL de tiempo de ejecución de Visual C ++).

Bono Agregado: Fake out MkLink

Coloque estos dos archivos adicionales en el mismo directorio donde tiene senable.exe y asegúrese de que todo esté en la ruta.

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"

Nota:

Necesita los siguientes elementos instalados en Windows 2003 (no R2, aún no estoy seguro de lo que necesita para R2):

  • Microsoft .NET Framework 2.0 Service Pack 1
  • Componente de imagen de Windows
  • Windows Server 2003 Service Pack 2
  • Windows Management Framework Core (esto trae PowerShell 2)

Paquete Chocolatey

Creé un paquete de chocolate que hará todo esto por usted: http://chocolatey.org/packages/win2003-mklink

Nota IMPORTANTE

A diferencia de los enlaces simbólicos normales, no puede simplemente eliminar la carpeta para eliminar la carpeta del enlace simbólico. Si lo haces, eliminará la carpeta real a la que apunta. Así que úsalo con sumo cuidado.


No puede hacerlo directamente, pero si crea un enlace simbólico debería poder apuntarlo a la letra de la unidad asignada.

net use e: // shares / folder # Usted querrá configurar esto de forma persistente o el próximo reinicio lo interrumpirá.

Navega usando cmd a tu ubicación donde quieras el enlace.

cd c: / carpeta

mklink / d nombre e: /

Ahora cualquier cosa que acceda a c: / folder / name / estará accediendo a // shares / folder /


No puedes mapearlo directamente, no. Puede intentar implementar una extensión de espacio de nombres de shell que esté registrada como parte del sistema de archivos para poder ubicarla donde lo necesite y luego acceder a la ruta UNC internamente. No es algo trivial de implementar, pero debería darle el resultado final que está buscando.


Sí, hay una manera de asignar una ruta UNC a una carpeta local:

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

Esto se debe a que quiero que un servidor de compilación use mi propia carpeta de Develop de PC como su carpeta de Develop :

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

Y ahí lo tienes.

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.

Nota : En mi situación real, necesitaba otro nivel de redirección, porque el programa que estoy usando se dio cuenta de que Develop era un enlace simbólico , apuntaba a una máquina remota y se negó a cumplir. Le dije al programa que se callara y que hiciera lo que se le dijo dándole un cruce que apunte a un recurso local .

10/20/2012 11:06 AM <JUNCTION> Develop [C:/Develop2/] 10/20/2012 11:01 AM <SYMLINKD> Develop2 [//obsidian/Develop]


Suponiendo que desea asignar // moo / cow a C: / cow_files, y que todavía no hay un servidor llamado moo (si lo hubiera, podría compartir la carpeta directamente, así que supongo que no lo hay), podría:

  1. Edite el archivo de hosts (o su DNS real si puede) para asignar moo a la máquina con C: / archivos_cubos en él. (O a localhost si el directorio es local al cliente que necesita la asignación).

  2. Comparta C: / cow_files como vaca en esa máquina.

Entonces deberías poder mapear a // moo / cow y obtener los archivos que necesitas, a menos que me haya perdido algo (que es posible :)).