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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ログアウト処理でWebブラウザを...
-
Webからアクセスし、画面のボタ...
-
BBS作成について。 諸事情によ...
-
EXCELファイルに誰がアクセスし...
-
空のファイル
-
ラジオボタンのグループ化
-
VBAでサーバーにアクセスするに...
-
ブラウザの表示URLを変える方法...
-
Image::Magickの呼び出し
-
.htaccessを2つ以上設置した場合
-
CGIでソースがそのままでてしま...
-
FTPにて553エラー
-
PostMail パーミッションについて
-
C# ファイル削除のエラーコード
-
jsRSSの設置方法について【NEW】
-
MP Form Mail CGI で 500サーバ...
-
メールフォーム作成でInternal ...
-
ASP(IIS?)のエラーについて
-
CGI初心者です
-
CGIにCSSを
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
Perlプログラム上でアラートを表示
-
ログアウト処理でWebブラウザを...
-
CとPerlどれくらい違うか?
-
ホームページ作成 cgi? java?
-
cgiで呼び出したプログラムを数...
-
空メールを送信すると、サーバ...
-
初心者です。助けて下さいq(T▽T...
-
cgi を定期的に自動実行
-
perlによる外部プログラムの実行
-
前回はごめんなさい。pythonでc...
-
同じ階層内を意味する「./」を...
-
pythonでのCGI作成
-
IISでエラー、Apachでは動くの...
-
メール受信時にパイプしてPerl...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
CGIでソースがそのままでてしま...
-
ASP(IIS?)のエラーについて
-
FTPにて553エラー
おすすめ情報