創建符號鏈接需要完整的管理員。從普通或非高級進程運行CreateSymbolicLink將失敗。自從第一次引入Windows 10時創建符號鏈接
在Windows 10中,CreateSymbolicLink在這些情況下也會失敗,即它不會創建任何內容,但它會返回成功代碼(!)並且GetLastError也爲0。所以除了檢查符號鏈接文件是否存在,沒有辦法檢測到錯誤
看起來像在Windows 10中的錯誤?
創建符號鏈接需要完整的管理員。從普通或非高級進程運行CreateSymbolicLink將失敗。自從第一次引入Windows 10時創建符號鏈接
在Windows 10中,CreateSymbolicLink在這些情況下也會失敗,即它不會創建任何內容,但它會返回成功代碼(!)並且GetLastError也爲0。所以除了檢查符號鏈接文件是否存在,沒有辦法檢測到錯誤
看起來像在Windows 10中的錯誤?
也經歷過一樣。 但是:您似乎獲得的成功代碼是錯誤代碼。因此,似乎已將CreateSymbolicLink的返回類型從BOOLEAN更改爲int
ouch;如果是這樣,那絕對是一個Windows錯誤。微軟很容易忽視這一點:幾乎沒有人使用過該功能。 :-) –
我看到你在官方MSDN文檔頁面發佈了一個錯誤報告......讓我們希望有人會注意到! – nikos
@nikos:我猜測它已經被修復了,因爲我無法在最新的預覽版本(10547)上重現。我沒有要測試的RTM版本。任何能夠重現問題的人都可以嘗試升級到10547以確認是否解決該問題? –
此工作週期適用於我:
將返回值更改爲整數。
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();
}
聽起來像是一個錯誤。但是你的代碼可能是錯誤的。我們看不到它。 –
我無法重現(預覽版本10547)。 –