Подтвердить что ты не робот

Есть ли способ сопоставить UNC-путь к локальной папке в Windows 2003?

Я знаю, что я могу сопоставить UNC-путь к букве локального диска. Тем не менее, мне интересно, есть ли способ сопоставить UNC-путь к локальной папке. У меня есть программа, которая имеет специальную папку, жестко закодированную в программе, и я хочу попробовать создать папку с тем же именем, которое сопоставляется с UNC-контуром, чтобы к данным можно было получить доступ из общего сетевого ресурса. Это выполнимо? В частности, это на сервере Windows 2003.

4b9b3361

Ответ 1

Это соответствует именно тому, что требует OP - символическая ссылка для Windows 2003, которая сопоставляется с общим сетевым ресурсом. После многих часов, глядя на других и тестируя их, это единственный компонент, который я нашел, который будет работать с сетевыми ресурсами.

Драйвер Symbolic Link для Windows XP

Эта утилита будет работать как для сопоставления XP и 2003, так и для создания символической ссылки: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp

Теперь поместите это в каталог, который вы помещаете в путь, и у вас есть возможность создавать символические ссылки с помощью senable.exesymlink.sys) и ln.exe (вам понадобится это с вышеуказанного сайта, а также его зависимость от DLL среды исполнения Visual С++).

Добавлен бонус: Fake out MkLink

Поместите эти дополнительные два файла в тот же каталог, где у вас есть 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 с пакетом обновления 1 (SP1)
  • Компонент обработки изображений Windows
  • Windows Server 2003 с пакетом обновления 2 (SP2)
  • Core Framework для управления Windows (это приносит PowerShell 2)

Пакет шоколада

Я создал шоколадный пакет, который сделает все это для вас: http://chocolatey.org/packages/win2003-mklink

Важное примечание

В отличие от обычных символических ссылок, вы не можете просто удалить папку, чтобы удалить символическую ссылку. Если вы это сделаете, он удалит реальную папку, на которую он указывает. Поэтому используйте с особой осторожностью.

Ответ 2

Да, есть способ сопоставить UNC-путь к локальной папке:

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

Это связано с тем, что я хочу, чтобы сервер сборки использовал мою собственную папку ПК 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]

Ответ 3

Вы не можете сделать это напрямую, но если вы создадите символическую ссылку, вы сможете указать ее на букву Mapped.

net use e:\\share\folder # Вы хотите настроить это на постоянную или следующую перезагрузку, это сломает его.

Просмотрите использование cmd в своем местоположении, в котором вы хотите использовать ссылку

cd c:\папка

mklink/d name e:\

Теперь все, что обращается к c:\folder\name \, будет иметь доступ к\\share\folder\

Ответ 4

Согласно Microsoft, вы НЕ МОЖЕТЕ сопоставить общую папку на удаленном компьютере (сервере) в локальной папке. Например:

  • общая папка на сервере:\\Server\share1
  • сопоставленный общий ресурс на локальном компьютере: c:\MyProgram\Some_Useluf_Files_Here

Это не работает!!!! Поскольку Microsoft заявила, что вы НЕ МОЖЕТЕ сделать mklink на удаленном компьютере, по крайней мере, не для Junction или Жестких ссылок. Вы можете использовать его только как ссылку Символическая, которая в основном является ярлыком. Поэтому, если какой-либо программе нужен доступ к локальной папке, такой же, как на сервере... извините, не повезло!! Windows не Linux, пусть не забывает taht:-(

Ответ 5

Вы не можете напрямую сопоставить его, нет. Вы можете попробовать внедрить расширение пространства имен оболочек, которое зарегистрировано как часть файловой системы, чтобы вы могли его root, где вам нужно, а затем получить доступ к пути UNC внутри. Не тривиальная вещь для реализации, но она должна дать вам конечный результат, который вы ищете.

Ответ 6

Предполагая, что вы хотите сопоставить \\moo\cow с C:\cow_files и что еще не существует сервера с именем moo (если бы вы могли просто поделиться папкой напрямую, поэтому я предполагаю, что нет), вы могли:

  • Отредактируйте файл hosts (или ваш фактический DNS, если сможете), чтобы сопоставить moo с машиной с C:\cow_files. (Или на localhost, если каталог является локальным для клиента, которому требуется сопоставление.)

  • Поделиться C:\cow_files как корова на этой машине.

Затем вы должны иметь возможность сопоставлять \\moo\cow и получать нужные вам файлы, если только я не пропустил что-то (что возможно:)).

Ответ 7

После долгих попыток я наконец понял, что вы не можете сделать это так, как я хотел. Я попробовал символическую ссылку, используя функциональность mklink в Server 2008, но выясняется, что .NET System.IO api не распознает символические ссылки. Итак, если вы используете Directory.GetFiles() в папке, которая символически связана, она выдает ошибку.