Winapi Wix自定义操作无法在Windows 7上创建SymbolicLink

Winapi Wix自定义操作无法在Windows 7上创建SymbolicLink,winapi,wix,Winapi,Wix,我正在开发一个Wix安装程序,它在自定义操作中创建一个symbolicink。自定义操作是用C编写的。它通过调用Win32 API创建SymbolicLink。在Windows 10上,该呼叫工作正常。在Windows7上它失败了。如果调用Marshal.GetLastWin32Error,它将返回错误代码997,即 以下是调用API的代码行: var result = CreateSymbolicLink(pathToCreateLink, installDir, SymbolicLinkFl

我正在开发一个Wix安装程序,它在自定义操作中创建一个symbolicink。自定义操作是用C编写的。它通过调用Win32 API创建SymbolicLink。在Windows 10上,该呼叫工作正常。在Windows7上它失败了。如果调用Marshal.GetLastWin32Error,它将返回错误代码997,即

以下是调用API的代码行:

var result = CreateSymbolicLink(pathToCreateLink, installDir, SymbolicLinkFlags.Directory | SymbolicLinkFlags.UnprivilegedCreate);
if(!result)
{
     _logger.Log($"Win32 Error Code: {Marshal.GetLastWin32Error()}");
}
以下是Dll导入:

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool CreateSymbolicLink( string lpSymlinkFileName, string pTargetFileName, SymbolicLinkFlags dwFlags);
调用自定义操作时,执行设置为,模拟设置为否

如果我把这行C代码放在控制台应用程序中,即使在Windows7上,它也能正常工作。因此,在安装程序中如何调用代码是导致错误的原因


我的问题的一部分是,我能找到的关于错误代码的信息很少,所以我不能确定尝试修复它的方法。

在wixsharp代码中可以找到一种确认。他们遇到了这个问题,无法超越它。


我在安装程序中实现的w/a是通过cmd工具mklink重复创建符号链接,如果也失败了,只需复制文件。

听起来确实很可怕。如果出现这样的错误,我将放弃符号链接方法——特别是在部署范围较大的情况下。它闻起来像是系统深处的某种东西,或者是Windows 7机箱中存在的某种特殊情况。你有在几个Windows7设备上测试过吗?我们甚至不知道,这是否是你得到的错误代码。您可能在错误的时间调用Marshal.GetLastWin32Error,或者您的P/Invoke声明没有将SetLastError属性设置为true。我们两种方法都不知道。投票关闭。如果您使用的文件夹值是面向用户的,但不适用于系统帐户,那么说明实际值的来源也可能很有用。