2015-10-08 25 views
0

創建符號鏈接需要完整的管理員。從普通或非高級進程運行CreateSymbolicLink將失敗。自從第一次引入Windows 10時創建符號鏈接

在Windows 10中,CreateSymbolicLink在這些情況下也會失敗,即它不會創建任何內容,但它會返回成功代碼(!)並且GetLastError也爲0。所以除了檢查符號鏈接文件是否存在,沒有辦法檢測到錯誤

看起來像在Windows 10中的錯誤?

+2

聽起來像是一個錯誤。但是你的代碼可能是錯誤的。我們看不到它。 –

+0

我無法重現(預覽版本10547)。 –

回答

1

也經歷過一樣。 但是:您似乎獲得的成功代碼是錯誤代碼。因此,似乎已將CreateSymbolicLink的返回類型從BOOLEAN更改爲int

+0

ouch;如果是這樣,那絕對是一個Windows錯誤。微軟很容易忽視這一點:幾乎沒有人使用過該功能。 :-) –

+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(); 
}