## 进阶篇 上面的对于frp做了一个批处理文件,每次开机都要去手动执行以下。 现在有个想法能不能直接做成一个服务(Windows 10系统) 今天早上尝试了各种,主要都是针对于`instsrv.exe和srvany.exe`,搞了一会不行啊!各种奇葩问题出现 [在这里](https://diannaobos.com/post/505.html)找到一篇[Windows10 64位系统设置FRPC开机自动启动](https://diannaobos.com/post/505.html)相关的文章 ## 引用别人的话 每次运行客户端都需要打开一个命令提示符窗口,很麻烦也不方便。有没有什么办法能够让客户端以Windows服务的方式在后台默默运行呢?答案当然是有的。用winsw让任何Windows程序都能运行为服务,完美解决了这个问题。 首先要下载winsw。它是一个单个的可执行文件,我们到Github release这里就可以下载winsw了。一般来说当然是下载最新的。winsw可以运行在.NET2和.NET4两个版本上,当然如果使用Win10等比较新的系统。 下载地址:[http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/](http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/) GitHub地址:[https://github.com/kohsuke/winsw](https://github.com/kohsuke/winsw) 下载最新的版本:http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/2.1.2/winsw-2.1.2-bin.exe 下载完之后最好把文件改成一个比较短小的名字,例如`winsw.exe`这样的,方便后面输入命令。 下面只说说配置。我这里是将winsw.exe和frpc.exe放到了一起,这样只需要直接填写程序名称。然后在和winsw.exe同级的目录下,新建winsw.xml文件,输入以下内容。 ``` <?xml version="1.0" encoding="UTF-8" ?> <service> <id>frp</id> <name>FrpServer</name> <description>This service runs frp reverse proxy.</description> <executable>D:\frp\frpc.exe</executable> <arguments>-c D:\frp\frpc.ini</arguments> <logmode>reset</logmode> </service> ``` > 这里有个坑,就是配置文件和执行文件名必须是一样的,不然会有以下错误,没法安装 ``` winsw-2.1.2-bin.exe install System.IO.FileNotFoundException: Unable to locate winsw-2.1.2-bin.xml file within executable directory or any parents 在 winsw.ServiceDescriptor..ctor() 在 winsw.WrapperService.Run(String[] _args, ServiceDescriptor descriptor) 在 winsw.WrapperService.Main(String[] args) ``` >最终的配置和可执行文件 ``` winsw.exe winsw.xml ``` 然后打开**管理员权限命令提示符**,使用下面的命令安装并启动服务。 ``` >D:\frp>winsw.exe install 2018-08-04 09:33:59,260 INFO - Installing the service with id 'frp' >D:\frp>winsw.exe start 2018-08-04 09:34:19,448 INFO - Starting the service with id 'frp' ``` >此时查看系统服务,已经启动成功 ![](images/screenshot_1533348430470.png) >再次通过公网访问本地电脑Web服务 注意:先开启本地Web服务,通过配置好的代理访问本地服务 [http://notes.frp.tinywan.top/index/index/last_insert_id](http://notes.frp.tinywan.top/index/index/last_insert_id) > 参考文献 * [Windows10 64位系统设置FRPC开机自动启动](https://diannaobos.com/post/505.html) * [Windows安装nginx服务](https://www.cnblogs.com/zhi-leaf/p/6274290.html) >[danger] ### 遇到的错误 同样的配置在另外一条电脑上启动提示以下错误: ``` $ ./frpc.exe -c frpc.ini ... 2018/08/20 13:40:19 [I] [control.go:246] [1c6282077d95c0f3] login to server success, get run id [1c6282077d95c0f3], server udp port [0] 2018/08/20 13:40:19 [W] [control.go:167] [1c6282077d95c0f3] [notes-web] start error: router config conflict 2018/08/20 13:40:19 [W] [control.go:167] [1c6282077d95c0f3] [pay-web] start error: router config conflict ``` 解决办法,修改服务端的配置文件的`token` 修改前: ``` token = 2W/WktjD1QB9xX/oDZSnH8mv81xzLNU283ern ``` 修改后: ``` token = tinywan_2W/WktjD1QB9xX/oDZSnH8mv81xzLNU283ern ``` 重新启动服务端服务 ``` frp$ nohup ./frps -c frps.ini & ``` 客户端重新连接,则不会出现以上的错误提示问题了 ``` $ ./frpc.exe -c frpc.ini ... 2018/08/20 13:49:52 [I] [control.go:246] [8c5750d30e537b64] login to server success, get run id [8c5750d30e537b64], server udp port [0] 2018/08/20 13:49:52 [I] [control.go:169] [8c5750d30e537b64] [notes] start proxy success 2018/08/20 13:49:52 [I] [control.go:169] [8c5750d30e537b64] [pay] start proxy success ```