C # CreateSymbolicLink не следует через общий доступ - PullRequest
1 голос
/ 20 декабря 2010

Я не уверен, является ли это просто проблемой C # или ограничением Windows.

У меня есть сервер, на котором запущена моя программа, которая создает символические ссылки в общей папке.Я могу получить доступ по этой ссылке с сервера, используя обычный путь к диску и общий ресурс.

Если я пытаюсь получить доступ к тому же общему ресурсу с другого компьютера, я не могу получить доступ к связанным файлам.Я могу удалить переименовать ... ссылки, но не могу перейти по ссылкам.

Я уже проверил acl ссылки и целевые файлы.Каждый должен иметь возможность доступа.

Я использую следующую функцию:

[DllImport("kernel32.dll")]
static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags);

Может быть, мне просто нужно установить некоторые дополнительные вещи?Или мне нужно изменить некоторые настройки Windows на сервере?

Извините, если решение не относится к программированию, но я думаю, что здесь у меня больше всего шансов получить помощь.

Редактировать1:

У меня есть общий ресурс: C: \ share

Ссылка: C: \ share \ file.txt

до места назначения: D: \ file.txt

Если я получаю доступ к общему ресурсу с другого компьютера, я не могу получить доступ к данным file.txt.

1 Ответ

0 голосов
/ 21 декабря 2011

Эта страница от Tuxera имеет хорошее описание причины

Аналогичная концепция символической ссылки также доступна в Windows Vista. Символические ссылки могут перенаправлять в файл или каталог определяется абсолютным или относительным путем. Когда определено на удаленном файловая система, они обрабатываются в локальной системе, тогда как каталоги обрабатываются на файловом сервере, что делает разница, когда целевой файл недоступен для файлового сервера.

Функция CreateSymbolicLink создаст ссылку, которая будет интерпретироваться клиентом. Таким образом, клиентский компьютер (не сервер) пытается получить доступ к файлу с именем d: \ file.txt, который, конечно, не существует на клиенте.

Для Windows Junction или Reparse Point будут работать на сервере, как в вашем примере. Самый простой способ создать внешнюю часть кода - использовать инструмент соединения SysInternals .

...