Windows本地服务执行SVN批处理遇E170013、E175013权限问题求助
SVN批处理在Windows服务执行时权限错误的解决思路
问题背景
使用TortoiseSVN与命令行编写了包含svn info、svn diff、svn update的批处理文件,开发Windows本地服务调用该批处理。手动双击执行批处理可正常更新目录,但服务执行时返回E170013(无法连接到仓库URL)与E175013(访问仓库URL被禁止)错误,仅svn info命令可正常运行。已修改服务使用用户会话ID,且完成权限、仓库URL、命令测试等排查,需解决服务执行与手动执行的一致性问题。
解决思路
指定服务运行的用户身份
Windows服务即使切换到用户会话,仍可能使用Local System等受限账户运行。需确保服务登录身份为你手动执行批处理的当前用户:- 打开服务管理器,找到目标本地服务
- 右键→属性→登录选项卡,选择「此账户」,输入日常使用的Windows账户名和密码
- 重启服务后重新测试批处理执行
手动同步SVN认证凭据
svn info仅需读权限,而svn diff/svn update需要写权限,服务账户的SVN认证缓存为空(Subversion\auth\svn.simple无文件)。可手动复制凭据到服务账户目录:- 手动执行一次
svn update,输入用户名密码并选择保存凭据,此时你的用户目录%APPDATA%\Subversion\auth\svn.simple会生成凭据文件 - 找到服务运行账户的AppData目录:
- 若为Local System,路径是
C:\Windows\System32\config\systemprofile\AppData\Roaming\Subversion\auth - 若为指定用户,路径是该用户的
%APPDATA%\Subversion\auth
- 若为Local System,路径是
- 将你用户目录下的
svn.simple凭据文件复制到服务账户的对应目录
- 手动执行一次
在批处理中显式指定SVN配置目录
服务可能加载系统级SVN配置而非用户级配置,可在批处理的每个SVN命令前添加配置目录参数:svn --config-dir "C:\Users\[你的用户名]\AppData\Roaming\Subversion" info [仓库URL] svn --config-dir "C:\Users\[你的用户名]\AppData\Roaming\Subversion" diff [本地目录] svn --config-dir "C:\Users\[你的用户名]\AppData\Roaming\Subversion" update [本地目录]替换
[你的用户名]为实际账户名,确保服务账户对该目录有读取权限排查服务账户的网络访问权限
服务账户可能存在网络访问限制:- 使用
runas /user:[服务账户名] cmd.exe打开服务账户的命令行,直接执行ping [仓库域名]和svn update测试网络连通性 - 检查防火墙规则,确认允许服务账户访问SVN仓库的对应端口(如SVN协议的3690端口、HTTPS的443端口)
- 使用
临时跳过HTTPS证书验证(测试用)
若为HTTPS仓库,服务可能无法加载用户的证书,可在批处理中添加参数跳过验证:svn update --trust-server-cert [本地目录]
内容的提问来源于stack exchange,提问作者난내이름안알려줄거야
相关产品推荐
相关产品推荐

