SetNamedSecurityInfo 1307 错误

本文详细介绍了如何解决使用SetNamedSecurityInfo函数时遇到的返回1307错误的问题。通过增加SE_RESTORE_NAME权限,可以有效解决该问题。本文提供了具体的实现步骤和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SetNamedSecurityInfo  1307 错误


SetFileSecurity (returns 1307)
SetSecurityInfo (returns 1307)
SetNamedSecurityInfo (returns 1307)
BackupWrite (returns 1307)
NtSetSecurityObject (returns 0xC000005A)


解决方法 增加SE_RESTORE_NAME权限


 
BOOL TakeSecurityPriv(LPCTSTR szPriv){


    BOOL bReturn = FALSE;


    HANDLE hProcToken = (HANDLE)0;


    if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hProcToken)){


        TOKEN_PRIVILEGES tpTokPriv;


        if (LookupPrivilegeValue(NULL,szPriv,&tpTokPriv.Privileges[0].Luid)){


            tpTokPriv.PrivilegeCount = 1;
            tpTokPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;


            if (AdjustTokenPrivileges(hProcToken,FALSE,&tpTokPriv,0,NULL,0)){


                bReturn = TRUE;


            }


        }


    }


    return bReturn;


}






if (TakeSecurityPriv(SE_RESTORE_NAME)) 








<think>好的,我现在需要帮助用户解决Redis安装过程中出现的多个错误。首先,用户已经按照之前的建议执行了sc delete Redis,成功删除了服务,但在重新安装时遇到了新的错误,包括SetNamedSecurityInfo Error 5和CreateService failed: error code=1073。同时,用户尝试使用完整路径运行redis-server.exe仍然失败,而taskkill显示没有找到redis-server进程。 首先,我需要分析这些错误代码的含义。错误5通常与权限不足有关,可能是用户没有以管理员身份运行命令提示符,或者Redis安装目录的权限设置阻止了服务账户访问。错误1073可能指向服务名冲突或注册表问题,尽管用户已经删除了服务,但可能仍有残留。此外,用户使用的是旧版Redis(3.0.504),可能存在兼容性问题。 接下来,我需要考虑用户可能的操作步骤是否正确。用户已经删除了服务,但安装时仍然失败,说明问题可能出在权限或目录访问上。可能的解决方案包括:确保以管理员身份运行命令提示符,检查目录权限,关闭防病毒软件,升级Redis版本,以及彻底清理注册表残留。 另外,用户尝试使用完整路径执行命令,但仍然失败,可能需要检查路径是否正确,或者是否存在文件损坏。此外,错误1073可能与服务安装时的其他依赖或配置有关,比如配置文件中的参数是否正确,或者端口是否被占用。 最后,用户可能需要升级到更新的Redis版本,因为旧版本在Windows上可能存在已知问题。总结来说,需要从权限、残留服务、目录权限、配置文件、版本兼容性等多个方面入手,逐步排查问题。</think>--- ### 问题梳理 你已执行以下操作: 1. 通过 `sc delete Redis` 删除服务残留 2. 尝试直接运行 `redis-server.exe` 安装服务 3. 确认 `redis-server.exe` 未在后台运行 但安装时仍出现 **SetNamedSecurityInfo Error 5**(权限拒绝)和 **error code=1073**(服务名冲突或权限问题)。核心问题已锁定为 **Redis安装目录权限不足** 或 **服务安装逻辑冲突**。 --- ### 分步解决方案 #### 步骤 1:修复目录权限(关键) 错误 `SetNamedSecurityInfo Error 5` 表示 Redis 服务账户无权操作安装目录 `F:\Redis-x64-3.0.504\`。需手动赋予权限: 1. **以管理员身份运行命令提示符**:右键点击 CMD 选择“以管理员身份运行”。 2. **为 `SYSTEM` 和 `Local Service` 账户添加完全控制权限**: ```bash icacls "F:\Redis-x64-3.0.504" /grant "NT AUTHORITY\SYSTEM:(OI)(CI)F" icacls "F:\Redis-x64-3.0.504" /grant "NT AUTHORITY\LOCAL SERVICE:(OI)(CI)F" ``` - `(OI)(CI)`:继承应用到子目录和文件 - `F`:完全控制权限 3. **验证权限是否生效**: ```bash icacls "F:\Redis-x64-3.0.504" ``` - 检查输出中是否包含 `NT AUTHORITY\SYSTEM:(F)` 和 `NT AUTHORITY\LOCAL SERVICE:(F)`。 --- #### 步骤 2:指定服务账户(针对旧版本 Redis) Redis 3.0.504 版本的服务安装逻辑可能存在缺陷,需强制指定服务运行账户: ```bash "F:\Redis-x64-3.0.504\redis-server.exe" --service-install "F:\Redis-x64-3.0.504\redis.windows.conf" --service-name Redis --service-user "NT AUTHORITY\LocalService" --service-pass "" ``` - `--service-user`:指定为系统内置的 `LocalService` 账户(低权限) - `--service-pass ""`:密码留空(符合系统账户特性) --- #### 步骤 3:升级 Redis 版本(终极方案) - **Redis 3.0.504 已严重过时**,其 Windows 版本存在已知权限和服务安装缺陷。 - **推荐升级到官方维护的 Windows 分支**: 1. 下载最新版 [Redis 7.2.4 for Windows](https://github.com/redis-windows/redis-windows/releases) 2. 解压到新目录(如 `F:\Redis-7.2.4`),避免旧配置冲突。 3. 重新执行服务安装命令: ```bash "F:\Redis-7.2.4\redis-server.exe" --service-install "F:\Redis-7.2.4\redis.windows.conf" --service-name Redis ``` --- #### 步骤 4:检查端口和配置文件 1. **确认 `redis.windows.conf` 中无冲突配置**: - 检查 `port 6379` 是否被其他程序占用: ```bash netstat -ano | findstr ":6379" ``` - 若端口被占用,修改配置文件中的 `port` 值(如 `6380`)。 2. **禁用保护模式(临时测试)**: 在 `redis.windows.conf` 中添加: ``` protected-mode no ``` --- ### 错误代码解析表 | 错误代码 | 含义 | 解决方案 | |-------------------------|-------------------------------|------------------------------| | `SetNamedSecurityInfo Error 5` | 权限不足(拒绝访问) | 使用 `icacls` 重置目录权限 | | `error code=1073` | 服务名冲突或注册表权限问题 | 升级 Redis 或清理注册表 | | `WIN32_EXIT_CODE: 1077` | 服务未配置自启动 | 检查服务启动类型是否为自动 | --- ### 验证服务状态 ```bash # 检查服务是否安装成功 sc query Redis # 启动服务 redis-server --service-start --service-name Redis # 查看日志(日志路径由配置文件指定) type "F:\Redis-x64-3.0.504\redis_log.txt" ``` --- ### 总结 问题根源在于 **旧版 Redis 的权限控制缺陷** 和 **目录访问权限未正确配置**。通过重置目录权限、指定服务账户或升级到新版 Redis 可彻底解决。若仍失败,建议彻底卸载旧版本并清理注册表项 `HKEY_LOCAL_MACHINE\SOFTWARE\Redis`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值