在Windows 8上运行的CreateSymbolicLink在Windows 7上返回错误代码1314

时间:2014-09-24 15:25:34

标签: c++ windows wix

我正在尝试使用Wix安装程序从自定义操作dll创建符号链接。

自定义操作以管理员身份运行,我使用以下代码确认:

http://code.msdn.microsoft.com/windowsdesktop/CppUACSelfElevation-5bfc52dd

问题是在Windows 8上创建了符号链接,但是在Windows 7上返回错误1314

  

ERROR_PRIVILEGE_NOT_HELD1314(0x522)
  客户不持有所需的特权。

Windows 7和Windows 8用户都能够以管理员身份运行该过程。

我知道如何解决这个问题吗?

的问候,
诺尔

2 个答案:

答案 0 :(得分:1)

错误并不是告诉您没有访问权限,而是告诉您没有特权。某些版本的操作系统需要明确请求某些特权。即使有管理员访问权限,Windows 7似乎也关闭了SeCreateSymbolicLinkPrivilege。

伪代码,但我相信在调用CreateSymbolicLink之前你必须调整进程令牌的权限

LUID luid;
if(LookupPrivilegeValue(NULL, _T("SeCreateSymbolicLinkPrivilege"), &luid))
{
    HANDLE hToken = get_process_token();
    TOKEN_PRIVILEGES token_privileges;
    token_privileges.PrivilegeCount             = 1;
    token_privileges.Privileges[0].Luid         = luid;
    token_privileges.Privileges[0].Attributes   = SE_PRIVILEGE_ENABLED;
    if(!AdjustTokenPrivileges(hToken, FALSE, &token_privileges, 0, NULL, NULL))
    {
        // TODO: call GetLastError and report an error.
    }
}

答案 1 :(得分:0)

我发现使用Windows 7或Vista上的MSI安装程序即使安装程序以管理员身份运行,Windows也不会让您创建符号链接。我最终做的是使用InnoSetup将.msi安装程序包装到.exe中,并从可执行文件中运行符号链接命令。

在Windows 8上,这是有效的,因为安装程序版本已更改。

希望这会有所帮助:)