我正在尝试使用Wix安装程序从自定义操作dll创建符号链接。
自定义操作以管理员身份运行,我使用以下代码确认:
http://code.msdn.microsoft.com/windowsdesktop/CppUACSelfElevation-5bfc52dd
问题是在Windows 8上创建了符号链接,但是在Windows 7上返回错误1314
:
ERROR_PRIVILEGE_NOT_HELD1314(0x522)
客户不持有所需的特权。
Windows 7和Windows 8用户都能够以管理员身份运行该过程。
我知道如何解决这个问题吗?
的问候,
诺尔
答案 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上,这是有效的,因为安装程序版本已更改。
希望这会有所帮助:)