Есть ли способ сопоставить путь UNC с локальной папкой в Windows 2003?
Я знаю, что могу сопоставить UNC-путь к локальной букве диска. Однако мне интересно, есть ли способ сопоставить путь UNC с локальной папкой. У меня есть программа, которая имеет определенную папку, жестко закодированную в программу, и я хочу попытаться создать папку с тем же именем, которая сопоставлена с UNC-путем, чтобы данные могли быть доступны из сетевого ресурса. Это выполнимо? Конкретно это на сервере Windows 2003.
7 ответов
это соответствует именно тому, что просил OP-символическая ссылка для Windows 2003, которая сопоставляется с сетевым ресурсом. После многих часов просмотра других и их тестирования это единственный компонент,который я нашел, который будет работать с сетевыми ресурсами.
драйвер символьной ссылки для Windows XP
эта утилита будет работать как для XP, так и для 2003 сопоставления с сетевым ресурсом и создания символической ссылки: http://schinagl.priv.at/nt/ln/ln.html#symboliclinksforwindowsxp
Теперь поместите это в каталог, который вы поставили на путь, и у вас есть возможность создавать символические ссылки с помощью senable.exe
(С symlink.sys
) и ln.exe
(вам понадобится это с вышеуказанного сайта, а также его зависимость от библиотек DLL среды выполнения Visual C++).
добавлен бонус: 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
симлинк.пс1:
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
- Компонент Windows Imaging
- Пакет Обновления 2 Для Windows Server 2003
- ядро Windows Management Framework (это приносит PowerShell 2)
Пакета Шоколадный
Я создал пакет chocolatey, который сделает все это для вас:http://chocolatey.org/packages/win2003-mklink
Важное Замечание
в отличие от обычных ссылок, вы не можете просто удалить папку, чтобы удалить символическую ссылку папку. Если вы это сделаете, он удалит реальную папку, на которую он указывает. Поэтому используйте с особой осторожностью.
Да, есть способ отобразить путь UNC в локальную папку:
C:\>mklink /D Develop \obsidian\Develop
symbolic link created for Develop <<===>> \obsidian\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]
вы не можете сделать это напрямую, но если вы создадите символическую ссылку, вы сможете указать ее на букву сопоставленного диска.
net use e: \ \ shares\folder # вы захотите настроить это постоянное или следующая перезагрузка сломает его.
обзор с помощью cmd к вашему местоположению вы хотите ссылку
компакт-диск c:\folder
mklink / D имя e:\
теперь все, что обращается c:\folder\name\ будет доступ к \\shares\folder\
согласно Microsoft, вы не можете сопоставить общую папку на удаленной машине (сервере) с локальной папкой. Например:
- общая папка на сервере: \ \ Server\share1
- сопоставленный общий ресурс на локальном компьютере: c:\MyProgram\Some_Useluf_Files_Here
Это не сработает!!!! Как Microsoft заявила, Вы не можете сделать mklink на удаленной машине, по крайней мере, не для перекрестке или жесткие ссылки. Ты можешь только делать это. как символическое ссылка, которая в основном является ярлыком. Поэтому, если определенной программе нужен доступ к локальной папке, которая такая же, как на сервере... жаль не повезло!! Windows не Linux давайте не забывать taht : - (
вы не можете отобразить его напрямую, нет. Вы можете попробовать реализовать расширение пространства имен оболочки, зарегистрированное как часть файловой системы, чтобы вы могли укоренить его там, где вам нужно, а затем получить доступ к пути UNC внутри. Не тривиальная вещь для реализации, но она должна дать вам конечный результат, который вы ищете.
предполагая, что вы хотите отобразить \\moo\cow на C:\cow_files, и что еще нет сервера с именем moo (если бы вы могли просто поделиться папкой напрямую, поэтому я предполагаю, что этого нет), вы могли бы:
отредактируйте файл hosts (или ваш фактический DNS, если можете), чтобы сопоставить moo с машиной с C:\cow_files на нем. (Или localhost, если каталог является локальным для клиента, которому требуется сопоставление.)
поделиться C:\cow_files как корова на что машина.
затем вы сможете сопоставить с \\moo\cow и получить необходимые файлы, если я что-то не пропустил (что возможно :)).
после долгих попыток я, наконец, понял, что вы не можете сделать это так, как я хотел. Я попробовал символическую ссылку, используя функциональность mklink в Server 2008, но оказалось, что система .NET.IO api не распознает символические ссылки. Итак, если вы делаете каталог.GetFiles () в папке, которая символически связана, выдаст ошибку.