命令行启动和双击启动的区别

今天调试一个自己写的程序,发现如果直接双击,那么这个程序一定会卡在 gRpc API 调用的地方,哪怕是加了 deadline 或者 cancelation 也不能退出。但如果是使用命令行 “.\tool.exe” 的方式启动,就可以正常运行。

原因可能是这个 localhost 的 gRpc server 使用了 https,但由于我没有证书,所以就 bypass 了 tls 认证,当使用双击启动的时候,由于权限等原因,bypass 并没有生效,程序卡在了 https 的底层认证部分,无法退出也无法被取消。而当使用命令行模式的时候,这个 bypass 就没有问题了。

以下是这两种方式启动程序的另外一些区别:

  • 路径:命令行启动时路径是比较清晰的,但是双击启动就不一定了,可能是某个用户,也可能是管理员,或者某个系统路径。如果程序使用了某些相对路径,那么在运行程序时就可能会出错。
  • 环境变量:命令行中可能有一些独有的变量。