2021年5月20日木曜日

denoからGUIアプリケーションを起動したい場合、Deno.runではウィンドウが表示されない

Deno.run()でコマンドラインなどの機能を利用できますが、Deno.runから呼び出されたアプリケーションはバックグラウンドでしか動作できないっぽいです。
Deno.runからエクスプローラやExcelなどを起動したい場合のサンプルが以下。
例えば「Deno.run({cmd:["notepad"]})」とした場合、新しいメモ帳が画面上に表示されることはありません。
タスクマネージャでnotepadのプロセスが起動していないか確認してみましたが、起動していませんでした。
「WScript.Sleep(1000 * 60)」とするだけの「test.js」を作成し、「Deno.run({cmd:["cscript", "test.js"]})」を実行したところ、1分間はcscriptのプロセスが起動している事がタスクマネージャから確認できましたが、ウィンドウは表示されませんでした。
エクスプローラなども同様。

しかしcscriptを経由すれば表示できる事を動作確認しました。


外部アプリケーションを起動したいだけの場合は「stdout : 'piped'」や「await p.output()」は不要ですが、これが無いと外部アプリケーションが起動する前にdenoが終了してしまうせいか外部アプリケーションも起動しなくなってしまうので、標準出力を読み込むまでdenoに待機させる目的で入れてあります。
それ以外の方法でdenoの処理が継続するプログラムの場合は省略してもOK、な筈。


実行結果



0 件のコメント:

コメントを投稿