2015-10-08 2 views
0

с тех пор, как они были впервые введены, создание символической ссылки потребовало полного администратора. Запуск из нормального или из невыполненного процесса CreateSymbolicLink завершился бы неудачно.CreateSymbolicLink на окнах 10

В Windows 10 в этих обстоятельствах также происходит сбой CreateSymbolicLink, то есть он ничего не создает, однако он возвращает код успеха (!), А GetLastError - тоже 0. Таким образом, нет возможности обнаружить ошибку, кроме проверки наличия файла symlink

Похож на ошибку в окнах 10?

+2

Звучит как ошибка. Но ваш код может быть неправильным. Мы не можем этого видеть. –

+0

Я не могу воспроизвести (предварительный просмотр 10547). –

ответ

1

Испытали то же самое. Но: Код успеха, который вы, кажется, получаете, является кодом ошибки. Таким образом, похоже, что сменил возвращаемый тип CreateSymbolicLink от BOOLEAN до int

+0

Ouch; если это так, это определенно ошибка Windows. Для Microsoft было бы легко забыть: почти никто никогда не использует эту функцию. :-) –

+0

Я вижу, что вы опубликовали отчет об ошибке на официальной странице документации MSDN ... будем надеяться, что кто-то заметит! – nikos

+0

@nikos: Я предполагаю, что он уже исправлен, так как я не могу воспроизвести последнюю версию предварительного просмотра (10547). У меня нет RTM-сборки для тестирования. Кто-нибудь может воспроизвести проблему, способную попробовать обновить до 10547, чтобы подтвердить, разрешает ли она это? –

0

Этот рабочий стол работает для меня:
Измените возвращаемое значение на целое.

1 = успех
для всех остальных значений называют GetLastWin32Error

[DllImport("kernel32.dll", EntryPoint = "CreateSymbolicLinkW", CharSet = CharSet.Unicode, SetLastError = true)] 
static extern int CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, SYMBOLIC_LINK_FLAG dwFlags); 

public static int CreateSymbolicLinkFix(string lpSymlinkFileName, string lpTargetFileName, int dwFlags) { 
    var result = CreateSymbolicLink(lpSymlinkFileName, lpTargetFileName, dwFlags); 
    if (result == 1) return 0; // Success 
    return Marshal.GetLastWin32Error(); 
} 
Смежные вопросы