Windows下把Shadowsocks建成系统服务

之前用GoAgent+来部署本地的Shadowsocks,发现依赖于.Net Framework 3.5,给别人用时经常由于没有安装这个依赖包而失败。后来由于GoAgent挂了,COW也没用过,实际上只用了自建的Shadowsocks,所以就想能不能从GoAgent+把SS单独剥离出来。查看Shadowsocks子目录发现比较关键的是ss-local.exe和config.json两个文件,查看系统进程发现ss-local.exe是通过命令行运行的,没有用到config.json文件,命令格式是:

ss-local.exe -s SS服务器 -p SS端口 -l 本地监听端口 -b 本地绑定的IP -k 密码 -m 方法 -t 超时时间

通过“ss-loca.exe -?”查看到通过“ss-loca.exe -c config.json”可以直接使用config.json里的配置,测试发现config.json必段所有内容放到第一行且同一行上才能识别,格式:

{"server":"SS服务器","server_port":SS端口,"local_address":"本地绑定的IP","local_port":本地监听端口,"password":"密码","timeout":超时时间,"method":"方法"}

本地绑定的IP如果使用127.0.0.1就只能用本机连接,如果使用0.0.0.0就可以共享给局域网的其它电脑连接。

这样只需要修改config.json文件即可,然后我们可以使用Microsoft Windows Resource Kits工具集中instsrv.exe和srvany.exe把ss-local.exe做成系统服务,开机时自动启动服务且没有界面。这是我写的一个部署批处理,复制保存成.bat或.cmd(和ss-local.exe放在同一个目录下),然后以管理员权限运行即可:

@echo off
set SS=Shadowsocks
set CUR_DIR=%~dp0
instsrv.exe %SS% %CUR_DIR%srvany.exe
set CUR_DIR=%CUR_DIR:\=\\%
set TEMP_REG="%TEMP%\register_%SS%.reg"
echo Windows Registry Editor Version 5.00>%TEMP_REG%
echo.>>%TEMP_REG%
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%SS%\Parameters]>>%TEMP_REG%
echo "Application"="%CUR_DIR%ss-local.exe">>%TEMP_REG%
echo "AppDirectory"="%CUR_DIR%">>%TEMP_REG%
echo "AppParameters"="-c config.json">>%TEMP_REG%
regedit /s %TEMP_REG%
del %TEMP_REG%
start /b /wait taskkill.exe /F /IM ss-local.exe
if %errorlevel%==0 ping -n 1 127.0.0.1>nul
net start %SS%

取消服务的批处理脚本,复制保存成.bat或.cmd,然后以管理员权限运行即可:

@echo off
set SS=Shadowsocks
net stop %SS%
instsrv.exe %SS% REMOVE

这里把这几个文件打成一个包共享下载:Shadowsocks

Tags:

2 Responses to “Windows下把Shadowsocks建成系统服务”

  1. Aliaosha说道:

    技术贴,看不懂。你的博客好像要手动加上https才能正常访问

    • lordong说道:

      域名早就被墙了,所以在墙内只能用https来访问,通过Shadowsocks就可以直接访问

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。