サーバー上のEXEファイルをクライアントで起動するには?

解決


モユモユ  2005-11-08 16:24:51  No: 92529  IP: [192.*.*.*]

VB6で開発しているのですが、
サーバー上にあるexeファイルをクライアント側で起動をかけて、
サーバー上で実行したいのですが何か良い方法はありませんか?
shell関数を使うとexeファイルがクライアント側で実行されてしまいます。
どこか参考になるサイトのURLを紹介して頂けるとありがたいです。
宜しくお願いします。

編集 削除
そうゆうのって  2005-11-08 16:51:00  No: 92530  IP: [192.*.*.*]

>サーバー上で実行したいのですが何か良い方法はありませんか?

よく、Webブラウザなどから、きどうさせるよね

編集 削除
我龍院忠太  2005-11-08 18:13:27  No: 92531  IP: [192.*.*.*]

仕掛けなしでいきなりサーバーのexeファイルの起動は出来ないよね。
簡単なのはWinsockを使った通信かな。

編集 削除
ひろ  2005-11-08 19:20:59  No: 92532  IP: [192.*.*.*]

とりあえず思いつく方法4つ

・CreateObjectの2つ目の引数を指定

・WebサーバからCGI起動

・Winsockで通信

・RDBMSを用意して、クライアントからDBにリクエストを書き込む。
  サーバ側ではDBに書かれたリクエストを見つけるとリクエスト内容に応じたexeが走る

やったことがないパターンの方が多いですが・・・

編集 削除
ガッ  2005-11-08 20:08:57  No: 92533  IP: [192.*.*.*]

インターネットワークの技術を使わないのなら
・人づてによる起動
・お願いの電話による起動
・郵便による起動
など、人的技術で解決できると思います。

…ネット使うと例外やセキュリティに対処するのが…(ぇ

編集 削除
コボル  2005-11-08 22:07:07  No: 92534  IP: [192.*.*.*]

ターミナルサービスを使うとか。

編集 削除
シロクロ  2005-11-09 09:06:36  No: 92535  IP: [192.*.*.*]

私も一度思案したことがあります。

 ①サーバ側ではEXEを実行状態にしておく。
 ②サーバ側で実行したEXEは常にデータベースを検索する
   ループ処理が入っている。
 ③クライアント側でサーバ側のEXEに処理をしてほしいという
   情報をDBに書き込む
 ④サーバ側のループが処理起動を読み取り実行する。
   その際、処理中を示す情報をDBに書き込む。
 ⑤クライアント側は、処理中の情報がなくなるまで待つ。
 
というものでした。

編集 削除
モユモユ  2005-11-09 09:42:41  No: 92536  IP: [192.*.*.*]

様々な貴重な意見をどうもありがとうございます。

クライアントのGUIがACCESSで作成されている為、
出来ればVBでプログラミングしたいのですが...。

LANなのでセキュリティはあまり気にしていません。
(ガッ様の言われる例外エラーが少し気にかかりますが)

当初、シンクロ様が思案したのと似たような形で処理を
実行していたのですが、サーバーのCPUに常に高い負荷が
かかる為、断念しました。
※私の力不足でCPUに負荷がかかっていたのかもしれません。

我龍院忠太様とひろ様の
・CreateObjectの2つ目の引数を指定
・Winsockで通信
を検討してみたいと思います。

Winsockについて参考になるサイトがあれば教えて頂けないでしょうか?

編集 削除
モユモユ  2005-11-09 09:47:02  No: 92537  IP: [192.*.*.*]

シロクロ様のお名前がシンクロ様になっていました。
失礼しました。すいません。

編集 削除
我龍院忠太  2005-11-09 10:40:15  No: 92538  IP: [192.*.*.*]

Winsockによるソケット通信は極めて簡単。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Socket/
サーバー側はListen状態にしておき、送られて来たデーターを見て
exeファイルをキックするだけ、Listen状態でのCPUに対する負荷も
殆ど有りません。

編集 削除
あん  2005-11-09 10:56:38  No: 92539  IP: [192.*.*.*]

セキュリティ上問題なければ
1  VBでActiveX.dll作成
1.1  クラス追加
1.2  クラスにサーバ上のプログラムを起動する処理を記述
2  1で作成したActiveX.dllをCOM+に登録
3  プロキシ作成(***.msi)
4  3で作成したプロキシをクライアントにインストール
5  クライアントでCreateObject実行
例  set obj = CreateObject("Project.Class1")
    Call obj.Start()
もう古臭い方法ですが
Windows DNA とか言われてた時、はやった方法です。

編集 削除
我龍院忠太  2005-11-09 11:10:32  No: 92540  IP: [192.*.*.*]

書き忘れましたが、Winsockによるタスクスイッチャーは
ローカルコンピューターでホスト側のexeファイルを起動
するのでは無く、あくまでも起動はホストコンピューター
によるもので、ローカルコンピューターはソケット
通信により、ホスト側に起動の指示を出すだけです。
従ってセキュリティーのリスクはソケット通信のリスクと
指示を埋め込む通信データーのプロトコルを解読される
リスクになります。
特定以外のコンピュータからの操作を排除したい場合は、
プロトコルを複雑にして(暗号化)などして、解読を
出来ないようするか、ローカルコンピューターが特定
されている場合は、ポーリングなどで、ホスト側から
ローカルマシンに接続を試みます。

編集 削除
モユモユ  2005-11-09 11:54:28  No: 92541  IP: [192.*.*.*]

我龍院忠太様、あん様  
ご教授どうもありがとうございます。
早速試して見たいと思います。

編集 削除
モユモユ  2005-11-09 14:10:28  No: 92542  IP: [192.*.*.*]

我龍院忠太様に紹介して頂いたサイトを参考にして
Winsockでの通信を試してみたところ、うまくいきました。
あん様のCreateObjectを指定する方法はプロキシをたてる
事が社内で禁止されている為、断念しました。

ご意見を下さった皆様、どうもありがとうございました。

編集 削除
あん  2005-11-09 14:45:45  No: 92543  IP: [192.*.*.*]

>あん様のCreateObjectを指定する方法はプロキシをたてる
プロキシサーバーのことじゃないからね  念のため。

編集 削除