CGIからGUIプログラムを立ち上げたい(Windows)
Windows XP SP2パソコン上で、自分のマシン上でファイルを閲覧したりプログラムを起動・制御するユーザインタフェースをブラウザにしようと、Apache/2.2.4(Win32)でローカルにhttpdを立ち上げています。
ブラウザ表示文書からCGIとして呼び出されたPerl(ActivePerl 5.005_03)プログラムが、system関数や``記法で外部のプログラムを実行することができますね。
ところが、起動した外部プログラムがウィンドウを開いてユーザと対話する種類のプログラム、つまりGUIプログラムの場合に限って、ウィンドウが開いてくれないので、したいことができません。
この原因と対策がお分かりになる方、教えてください。
(たとえば単純化のためにWindowsの電卓プログラムcalc.exeを起動してもウィンドウが出てくれません。
PowerShellスクリプト経由にしても元がブラウザだという情報が波及するらしくウィンドウが立ち上がりません。)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ディスクトップ→デスクトップですね。
失礼しました。他の方も説明されていますが、
Apacheから呼び出されるCGIに関しては、
CUIのツールなら、システムコールの手法で、標準入力や標準出力を
Apacheへパイプすることが簡単にできるので、
CUIの出力結果をブラウザに出すことができます。
しかし、GUIのツールに関してはWindowsであればWindowsのAPIを使って
実行しているコンピュータへのグラフィック出力やマウスイベント取り出しなどに引き渡されるので、
ブラウザへ出力を引き渡すためには、それをそのまま、ラッパーして、
グラフィック命令から画面のサイズや作画命令に依存しない汎用的なコマンドに変換し、
それをブラウザ上で組み立てるか、
一旦仮想グラフィック画面に出力しておいて、それをビットストリームのイメージにして
ブラウザ上で動画再生させ、
ブラウザ上のマウスやキーボードの動きを仮想グラフィック画面に戻すといったイメージになると 予測されます。
前者の方法が、メタフレーム(WindowsServertとメタフレームサーバーとメタフレームに対応したGUIアプリ)
後者の方法が、リモートデスクトップであると、私は理解しております。
GUIの出力結果をwrapでCGIに戻し,そこで解読し欲しいものを組み立ててブラウザ画面に表示させるといった流れですね.丁寧なご説明どうもありがとうございます.
No.3
- 回答日時:
もうひとつ。
メタフレームという技術があります。
これもリモートデスクトップに近い形態ですね。したいことと若干方向が違うような感じもしますが考えてみます。多くの情報をいただいて勉強になりました。
No.2
- 回答日時:
ブラウザから、Windowsをリモート操作するツールがあるので、
それの利用ではどうでしょうか?
「ThinVNC」や「リモートディスクトップ」
ただ、一般公開してしまうと、触ってほしくないとこまで、触られてしまいますが。
機能限定させるために、独自開発するなら
GUIの出力や入力イベントをラップして、Apache経由でブラウザに引き渡すツールを作ることになりますが、
それに工数をかけるぐらいなら、同じことをやるCGIを作ったほうが、工数もシステムトラブルも小さくなると思われます。
No.1
- 回答日時:
厳しい言葉かもしれませんがCGIとはなにかを理解されていません。
また、HTTP、サーバ/クライアント、プラットホームに関する概念もすっぽり抜け落ちております。
ポイント、ポイントでの知識はおありのようですがそれらが線としてつながっていないのが誤解の原因です。
CGIは「サーバ側のプログラムを実行してその結果を標準出力でWebサーバに返す」仕組み
GUIプログラムは基本的にイベントドリブン型のプログラム(要はエンドレス)で、ユーザが外部デバイスからアクションを起こさない限りひらっきぱなし。
それが許されれば世のGUIを搭載したWebサーバは限界まで開かれたGUIアプリでパンクする危険性を常にはらむことになるでしょう。
ブラウザからサーバのGUIはコントロールする仕組みは今のところ無いのですから。
サーバ管理者がクライアントによってつぎからつぎへと開かれる電卓を永遠に閉じ続ける作業を想像すると怖いものがあります。
ブラクラならぬサバクラって感じでしょうか?
ローカルで完結していようがなんだろうがWebサーバを介していれば内部的にはネットワーク経由で接続されているのです。
ブラウザがクライアントで、あなたのマシンがサーバです。
たまたま、同じマシン上なので「錯覚」を起こしているのです。
> この原因と対策がお分かりになる方、教えてください。
長い前置きでしたが
原因:あなたのCGIに対する過大評価と理解不足
対策:素直にCGIからの起動はあきらめて、ローカルプラットホーム上での開発を行う
険があったらすいません。
でも、馬を竹につないで竹馬を作ろうとするくらい(そこまでじゃないかも)ベクトルが異なるご質問でしたので・・・。
この回答への補足
早速の詳しいアドバイスをどうもありがとうございます。
おっしゃっていただいたことは理解の上で手段を探しています。
たとえば次の手段はきれいではなくタイムラグもありますが、「ブラクラならぬサバクラ」の抜け道を開くことなく私の目的を果たしてくれます。
「CGIはあるファイルにリクエストを書く。一方、コマンドプロンプトなど別のGUIプログラム配下でプログラムを常時走らせておき、一定時間おきにsleepが解けてリクエストがないかチェックする。もしリクエストが届いていれば、解読してチェックし実行する。これによりブラウザとそのGUIプログラム以外に新しくウィンドウが立ち上がって、リクエストされたプログラムが実行される。」
これを作れば確実に動きます。
けれども、もっときれいでタイムラグのない方法が欲しいのです。
Apacheのconf設定位では可能にならないとすれば、たとえば
・pipeを使ってタイムラグをなくす方法や、
・Windowsの "サービス" 形態のプログラムを作ることで、GUIプログラムを常時走らせておく必要をなくすという方法
・その他の方法
があれば具体的に教えてください。
もしさんざん調べて作ってダメだとダメージが大きいので。
私が最初にここまで詳しく書けばよかったですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(プログラミング・Web制作) Windows上のプログラム。「予め決められた時刻に自分で起動して処理して自分で終了する」って可能? 3 2023/01/04 14:29
- その他(コンピューター・テクノロジー) Windows 11 Version 22H2 の (KB5023706)のアップデートに失敗する 2 2023/03/25 21:06
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Windows 10 WindowsホストのVMware workstationで仮想マシンをシステム起動時に起動できるか 3 2023/06/18 17:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIの起動が遅い
-
CGIって何ですか?簡潔に教えて...
-
http://www.***.com/***/***.cg...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
VBAでサーバーにアクセスするに...
-
ApacheでのCGIについての質問
-
特定のCGIだけ、作動するかわり...
-
ラジオボタンのグループ化
-
表示画面が真っ白になる場合、...
-
HTTP 501未実装 エラーについて
-
C言語のapacheの設定
-
CGIでの500エラー
-
VBAを使用して、外部サーバのフ...
-
掲示板のスレッドが消えた!?
-
Apacheでphpとcgiを使いたいの...
-
FTPにて553エラー
-
CGIでソースがそのままでてしま...
-
ユーザの所属するグループを取...
-
cgiファイルを実行すると、「開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
cgi を定期的に自動実行
-
Perlプログラム上でアラートを表示
-
IISでエラー、Apachでは動くの...
-
同じ階層内を意味する「./」を...
-
Webからアクセスし、画面のボタ...
-
初心者です。助けて下さいq(T▽T...
-
CGIプログラムをインターネット...
-
前回はごめんなさい。pythonでc...
-
IIS の管理コンソールというのは
-
シェルで書いたプログラムをper...
-
ログアウト処理でWebブラウザを...
-
CとPerlどれくらい違うか?
-
Javascript から CGI の呼び出し
-
cgiで呼び出したプログラムを数...
-
CGIからGUIプログラムを立ち上...
-
C言語のCGIはプロパイダに聞か...
-
http://www.***.com/***/***.cg...
-
ホームページ作成 cgi? java?
-
Cshell 標準出力を見張る方法...
おすすめ情報