Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows 8上运行的CreateSynomalClink在Windows 7上返回错误代码1314_C++_Windows_Wix - Fatal编程技术网

C++ 在Windows 8上运行的CreateSynomalClink在Windows 7上返回错误代码1314

C++ 在Windows 8上运行的CreateSynomalClink在Windows 7上返回错误代码1314,c++,windows,wix,C++,Windows,Wix,我正在尝试使用Wix安装程序从自定义动作dll创建符号链接 自定义操作以管理员身份运行,我使用以下代码进行了确认: 问题是在Windows 8上创建了符号链接,但在Windows 7上返回了错误1314: 错误\u特权\u不\u HELD1314(0x522) 客户端不拥有所需的权限 Windows 7和Windows 8用户都可以作为管理员运行该进程 你知道我怎样才能解决这个问题吗 问候, Noel错误不是告诉你没有访问权限,而是告诉你没有权限。在某些版本的操作系统下,需要显式请求某些特权。

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

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

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

错误\u特权\u不\u HELD1314(0x522)
客户端不拥有所需的权限

Windows 7和Windows 8用户都可以作为管理员运行该进程

你知道我怎样才能解决这个问题吗

问候,

Noel

错误不是告诉你没有访问权限,而是告诉你没有权限。在某些版本的操作系统下,需要显式请求某些特权。即使具有管理员访问权限,Windows 7似乎也关闭了secreateClinkPrivilege

伪代码,但我相信在调用
createsymbolicink

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.
    }
}

我发现,在Windows7或Vista上安装MSI安装程序时,即使安装程序以管理员身份运行,Windows也不允许您创建符号链接。最后,我使用InnoSetup将.msi安装程序包装到.exe中,并从可执行文件运行符号链接命令

在windows 8上,由于安装程序版本已更改,因此此操作有效


希望这有帮助:)

msiexec服务进程没有所有可用的权限,无论您是否是管理员。它会明确删除MS认为您在安装过程中不需要的权限。这就是信息。您无法启用该特权,因为它甚至不存在于要启用的进程中。msiexec服务的权限列表会随着版本的变化而变化,这就是为什么会有差异。找不到列表,尽管我以前见过。这意味着您无法从自定义操作执行任何操作,因此我建议在应用程序首次运行时将其作为一个独立的进程来执行。请参阅(向下滚动一点到privs列表)和与SeBackUpPrivilege相关的内容,您无法使用调整权限来修复该问题,因为该权限甚至不在要调整的进程中。IIRC,默认情况下,只有一个权限处于启用状态,即SeChangeNotifyPrivilege。但是,如果某些API函数可用,它们会自动启用所需的特权。根据PhilDW的评论,安装程序的令牌也有可能被明确剥夺了这一特权,尽管这对我来说似乎有些奇怪。这并不奇怪——服务拥有所需的最低特权是MS的标准做法。其他特权被显式剥夺,因为如果CA Dll调用可以恢复它们,为什么还要麻烦呢?我以为我们在这里讨论的是安装程序——它必须在运行后具有管理员访问权限。另外,所讨论的特权似乎只有在Win7上默认关闭。与“标准”相反,不,这仍然是最低权限,而是MS认为安装需要的一组权限。如图所示,它们有时会走得太远。特权级别不同于它是否处于提升状态。我们已经清楚地确定,安装程序没有所有权限。它仍然在运行,否则安装程序实际上就无能为力了。