Windows 10上的CreateSymbolicLink

时间:2015-10-08 08:26:19

标签: winapi symlink

自从它们首次推出以来,创建符号链接需要一个完整的管理员。从正常或非升级过程运行CreateSymbolicLink将失败。

在Windows 10中,CreateSymbolicLink在这些情况下也会失败,也就是说它不会创建任何内容,但是它会返回成功代码(!),而GetLastError也是0。因此除了检查符号链接文件是否存在之外,没有办法检测错误

看起来像是Windows 10中的一个错误?

2 个答案:

答案 0 :(得分:1)

经历过同样的经历。 但是:您似乎得到的成功代码是错误代码。因此,似乎已将CreateSymbolicLink的返回类型从BOOLEAN更改为int

答案 1 :(得分:0)

这个workround为我工作:
将返回值更改为整数。

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