VB6で開発しているのですが、
サーバー上にあるexeファイルをクライアント側で起動をかけて、
サーバー上で実行したいのですが何か良い方法はありませんか?
shell関数を使うとexeファイルがクライアント側で実行されてしまいます。
どこか参考になるサイトのURLを紹介して頂けるとありがたいです。
宜しくお願いします。
>サーバー上で実行したいのですが何か良い方法はありませんか?
よく、Webブラウザなどから、きどうさせるよね
仕掛けなしでいきなりサーバーのexeファイルの起動は出来ないよね。
簡単なのはWinsockを使った通信かな。
とりあえず思いつく方法4つ
・CreateObjectの2つ目の引数を指定
・WebサーバからCGI起動
・Winsockで通信
・RDBMSを用意して、クライアントからDBにリクエストを書き込む。
サーバ側ではDBに書かれたリクエストを見つけるとリクエスト内容に応じたexeが走る
やったことがないパターンの方が多いですが・・・
インターネットワークの技術を使わないのなら
・人づてによる起動
・お願いの電話による起動
・郵便による起動
など、人的技術で解決できると思います。
…ネット使うと例外やセキュリティに対処するのが…(ぇ
ターミナルサービスを使うとか。
私も一度思案したことがあります。
①サーバ側ではEXEを実行状態にしておく。
②サーバ側で実行したEXEは常にデータベースを検索する
ループ処理が入っている。
③クライアント側でサーバ側のEXEに処理をしてほしいという
情報をDBに書き込む
④サーバ側のループが処理起動を読み取り実行する。
その際、処理中を示す情報をDBに書き込む。
⑤クライアント側は、処理中の情報がなくなるまで待つ。
というものでした。
様々な貴重な意見をどうもありがとうございます。
クライアントのGUIがACCESSで作成されている為、
出来ればVBでプログラミングしたいのですが...。
LANなのでセキュリティはあまり気にしていません。
(ガッ様の言われる例外エラーが少し気にかかりますが)
当初、シンクロ様が思案したのと似たような形で処理を
実行していたのですが、サーバーのCPUに常に高い負荷が
かかる為、断念しました。
※私の力不足でCPUに負荷がかかっていたのかもしれません。
我龍院忠太様とひろ様の
・CreateObjectの2つ目の引数を指定
・Winsockで通信
を検討してみたいと思います。
Winsockについて参考になるサイトがあれば教えて頂けないでしょうか?
シロクロ様のお名前がシンクロ様になっていました。
失礼しました。すいません。
Winsockによるソケット通信は極めて簡単。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Socket/
サーバー側はListen状態にしておき、送られて来たデーターを見て
exeファイルをキックするだけ、Listen状態でのCPUに対する負荷も
殆ど有りません。
セキュリティ上問題なければ
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 とか言われてた時、はやった方法です。
書き忘れましたが、Winsockによるタスクスイッチャーは
ローカルコンピューターでホスト側のexeファイルを起動
するのでは無く、あくまでも起動はホストコンピューター
によるもので、ローカルコンピューターはソケット
通信により、ホスト側に起動の指示を出すだけです。
従ってセキュリティーのリスクはソケット通信のリスクと
指示を埋め込む通信データーのプロトコルを解読される
リスクになります。
特定以外のコンピュータからの操作を排除したい場合は、
プロトコルを複雑にして(暗号化)などして、解読を
出来ないようするか、ローカルコンピューターが特定
されている場合は、ポーリングなどで、ホスト側から
ローカルマシンに接続を試みます。
我龍院忠太様、あん様
ご教授どうもありがとうございます。
早速試して見たいと思います。
我龍院忠太様に紹介して頂いたサイトを参考にして
Winsockでの通信を試してみたところ、うまくいきました。
あん様のCreateObjectを指定する方法はプロキシをたてる
事が社内で禁止されている為、断念しました。
ご意見を下さった皆様、どうもありがとうございました。
>あん様のCreateObjectを指定する方法はプロキシをたてる
プロキシサーバーのことじゃないからね 念のため。
ツイート | ![]() |