在Windows 10中,CreateSymbolicLink在这些情况下也会失败,也就是说它不会创建任何内容,但是它会返回成功代码(!),而GetLastError也是0。因此除了检查符号链接文件是否存在之外,没有办法检测错误
看起来像是Windows 10中的一个错误?
答案 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();
}