docmirror/dev-sidecar

Windows操作系统,开着DS应用重启电脑后无法上网的问题说明

greper opened this issue · 16 comments

应用开启后会自动修改系统代理设置,正常退出会自动关闭系统代理
当应用意外关闭时,可能会因为没有将系统代理恢复,从而导致完全无法上网。

对于此问题有如下几种解决方案可供选择:
1、重新打开应用即可(右键应用托盘图标可完全退出,将会正常关闭系统代理设置)
2、如果应用被卸载了,此时需要手动恢复系统代理设置
3、你也可以设置ds为开机自启

目前由于Electron无法监听windows的关机事件,所以暂时没有什么好办法能够解决此问题,我会持续跟踪electron的相关更新。

环境:Win10 21H1

方法1 开关机脚本

在系统开关机脚本目录下需要用户权限,简单一点就是在当前用户目录下新建bat脚本。如 %USERPROFILE%
系统默认开关机脚本目录

C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup

在用户目录(%USERPROFILE%)新建文件 colse_proxy.bat

"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1

打开组策略 gpedit.msc->计算机管理->Windows设置->脚本(启动/关机)

添加脚本,名称填写批处理的全路径.
脚本bat内容(直接关闭代理设置)

"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1

方法2 任务计划

任务计划程序->创建基本任务->触发器->计算机启动时(或者是登陆时),最后查看属性对话框;
可以修改延迟多长时间启动,以及以最高权限运行脚本。

脚本bat内容(检测程序是否运行,没有运行就关闭代理)

@echo off

set logfile="C:\\batlog.txt"

echo %date:~0,10%_%time:~0,2%%time:~3,2%%time:~6,2% >> %logfile%

tasklist | find "dev-sidecar" /i

if "%errorlevel%" == "1" (
	echo "close sysproxy" >> %logfile%
	"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1
)else echo "do nothing"  >> %logfile%


echo.>> %logfile%

发现开关机脚本不怎么好用,选择自己适合的方法吧

环境:Win10 21H1

方法1 开关机脚本

在系统开关机脚本目录下需要用户权限,简单一点就是在当前用户目录下新建bat脚本。如 %USERPROFILE%
系统默认开关机脚本目录

C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup

在用户目录(%USERPROFILE%)新建文件 colse_proxy.bat

"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1

打开组策略 gpedit.msc->计算机管理->Windows设置->脚本(启动/关机)

添加脚本,名称填写批处理的全路径.
脚本内容(直接关闭代理设置)

"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1

方法2 任务计划

任务计划程序->创建基本任务->触发器->计算机启动时(或者是登陆时),最后查看属性对话框;
可以修改延迟多长时间启动,以及以最高权限运行脚本。

脚本内容(检测程序是否运行,没有运行就关闭代理)

@echo off

tasklist | find "dev-sidecar" /i
if "%errorlevel%"=="1" (
	echo "close sysproxy"
	"C:\Program Files\DevSidecar\dev-sidecar\resources\extra\sysproxy.exe" set 1
)else(
	echo "do nothing"
)

发现开关机脚本不怎么好用,选择自己适合的方法吧

反复重启测试还好,过了几个小时开机发现还是没关闭代理,不知道为什么,下次把执行过程输出到日志看一下

这种直接开机以后把软件打开,再关闭退出,网络就好了吧

zsk66 commented

我都是用360网络恢复。。

zsk66 commented

亲测 360网络恢复好使,但是每次360开机就要自启还是很烦

win11可以用吗?

我的办法是用任务计划程序直接修改注册表,开机时不管之前有没有设置代理都直接取消Internet选项中的代理设置
image
add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

根据 https://github.com/paymoapp/electron-shutdown-handler 提供的方法应该可以解决这个问题, 或许我可以开一个 PR

麻烦你开一个PR吧。

PR 遇到了一些问题,我正在尝试解决 😅

cc @wangliang181230
image
日志里正确打印了,但是代理没有正确的关闭,你有什么头绪?

ds是借助第三方的 proxy.exe 来设置系统代理的。可能就是这个导致的。关机过程中无法启动这个程序。

想办法用nodejs直接设置Windows系统代理。

看起来是调用 sysproxy 失败了
image

我发现在管理员模式下启动应用能正常关闭代理

如果没有意外的话今天应该能完成这个PR