WindowsでSyncthingの--no-consoleオプションが効かないときはconhostから実行しろ
概要
SyncthingはP2P通信でフォルダを監視し差分を共有するフォルダ同期アプリケーションです。この記事はこのSyncthingの自動立ち上げにおいて、--no-console
フラグを指定しても、Windows TerminalのGUIが起動してしまう問題について、対症療法的な解決を紹介するものです。
解決
スタートアップディレクトリ C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
に下記の内容のショートカットを作成します。
C:\Windows\System32\conhost.exe "C:\Path\To\syncthing.exe" -no-console -no-browser
何が問題だったか
Windows10 及び11はデフォルトのターミナルソフトとしてWindows Terminalが指定されるようになりました。ところがこのWindows TerminalではSyncthingのバックグラウンドプロセスがうまく起動してくれないようです。他の解決方法として、レガシーモードで起動するという方法もありますが、このレガシーモードはグローバルな変更を要請するもので、WSL2でVScodeが起動しなくなるという問題が報告されています。
conhostって何?
conhost.exe
は、Windowsオペレーティングシステムの一部で、コマンドラインインターフェイス(CLI)ウィンドウを管理するためのプログラムです。
conhost.exe
の主な目的は、コマンドプロンプトやPowerShellなどのコンソールアプリケーションとユーザーインターフェイス(UI)コンポーネントとの間で仲介することとのことです。これにより、テキストベースのアプリケーションがWindowsのグラフィカルユーザーインターフェイス(GUI)の下でより効果的に動作するようになるというものです。
今回の解決では、このconhost.exe
を経由してsyncthingを起動するというものでした。
参考文献
Discussion