🔄

WindowsでSyncthingの--no-consoleオプションが効かないときはconhostから実行しろ

2023/11/30に公開

概要

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を起動するというものでした。

参考文献

https://github.com/syncthing/syncthing/issues/8046

Discussion