Wix Custom Action无法在Windows 7上创建SymbolicLink

时间:2018-03-23 19:12:52

标签: winapi wix

我正在开发一个在自定义操作中创建SymbolicLink的Wix安装程序。自定义操作是用C#编写的。它通过调用CreateSymbolicLink Win32 API来创建SymbolicLink。在Windows 10上,通话完美无缺。在Windows 7上它失败了。如果我调用Marshal.GetLastWin32Error(),它将返回错误代码997,即ERROR_IO_PENDING

以下是调用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);

调用自定义操作时,Execute设置为“deferred”,Impersonate设置为“no”。

如果我将C#代码行放在控制台应用程序中,它可以正常运行(即使在Windows 7上)。因此,有一些关于如何在安装程序中调用导致错误的代码。

我的部分问题是我可以找到关于错误代码的非常少的信息,因此我无法确定要尝试修复它的内容。

1 个答案:

答案 0 :(得分:1)

可以在wixsharp代码中找到一种确认。他们遇到了这个问题,无法超越。 https://github.com/oleg-shilo/wixsharp/blob/master/Source/src/WixSharp/ResilientPackage.cs

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