- ベストアンサー
WebアプリよりVC++で作成したEXEを呼出す方法
初めて、投稿します。よろしくお願いします。 既にVC++6.0で作成されているWindowsアプリケーションを 既に作成した自作のWebアプリケーション(Java+JSPで作成)から呼出す場合、 どのような方法を取ればよいのでしょうか? 過去のログを見ていると、ActiveXコントロールに移植する方法が考えられるようですが、 そうすると、内部の集計ロジックは使いまわせるとしても、一から作り直すことになるように思われます。 コストを抑えて、求められている機能を実現するには、どのような方法が考えられるでしょうか? アドバイスお願いします。 ※個人的には、Windowsアプリで行おうとしている処理を すべてWebアプリで処理したほうがコストを抑えられるような気が・・・。 ≪実行/開発環境≫ ●サーバ環境 Windows2000Server SP4 IIS 5.0+J2SE1.3.1_04+Tomcat 3.3.1 SQLServer2000 既存のWebアプリケーションは、Java、JSPで作成 フレームワークとしてStrutsを採用 ●クライアント環境 WindowsXP or Windows2000 Internet Explorer 6.0 VC++6.0 ≪既存Windowsアプリの機能≫ ●既存のWindowsアプリケーションは、ダイアログベースのアプリケーション (プロジェクト作成時、「MFC AppWizard (exe)」で「ダイアログベース」を選択)。 ●DBに接続し、指定された条件でデータを取得し、集計処理を行う。 ●集計処理後、集計結果を以下のいずれかの方法で出力。 (1)CSVファイル (2)グラフ画面表示(MSChartを使用) ≪求められている機能≫ ●Webアプリ(Webブラウザ)からWindowsアプリを呼出す (Windowsアプリの機能を活用したい) ●既存のWindowsアプリでは、集計条件、集計結果の出力方法は 画面より指定していたが、今回は設定ファイルから読込む。 画面から指定はしない。 以上です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
クライアント要件として、既存のWinアプリがうごいていた環境でしかつかえないという制約がつきます。 WindowsアプリはC/S方式であり、単体でネットワーク越しにDB接続ができれば、単純にWinアプリを起動してしまえばおわりですよね? つまり、ACTIVEXからWinアプリを起動すればいいと思います。 そして、ACTIVEXから起動すれば、Winアプリにフックをかけることもできますし、 Winアプリに対してActiveXからメッセージを送ることも可能かと思います。 (ハンドルを取得できますので) もちろん起動さえできれば単体で動きますので、Winアプリの機能をそのまま使いたいのであれば、 同時終了するために破棄メッセージ送るくらいだと思います。 そして、自動セットアップですが、 これに関してもActiveXに通信機能をもたせて、HTTPサーバーに接続しexeをダウンロードし、 要件にあわせてシステムに定められたクライアントの特殊フォルダ等にコピーしてしまえばいいと思います。 >既存のWindowsアプリでは、集計条件、集計結果の出力方法は > 画面より指定していたが、今回は設定ファイルから読込む。 > 画面から指定はしない。 に関してはメッセージをおくったところでどうしようもないのでWinアプリをすこしいじらないといけないとは思いますが。 2年前くらいに同じようなことをした記憶がありましたが、コストと要件をすり合わせるために思いついただけですので、とくにどこのサイトを参考にしたということはありませんでした^^; 1、WebサーバーよりActiveXをダウンロード 2、ActiveXがクライアント内の規定の場所にWinアプリが存在するか調べる。 3、なければ、ActiveXからソケット通信によりHTTPサーバーに接続しWinアプリや設定ファイルをダウンロードし、クライアントにコピーする 4、Winアプリをキックする。 5、Winアプリより先にActiveXが破棄されたときは、Winアプリに破棄メッセージを通知する といった手順になると思います。 イメージは湧くでしょうか?
その他の回答 (4)
- hidebu-
- ベストアンサー率53% (45/84)
補足です^^; >(同じような事例は結構あるものなのでしょうか?) 基本的にワーム等のウィルスはこの手順を基本にしてるものがおおいです。 スタートアップレジストリにEXEを登録するところと、 ActiveXを使ってダウンロードするところを、IEの脆弱性等をついてローカルにEXEを忍ばせるようにすればまさにウィルスです^^; 仕事の関係でいくと、いままでの業務プロセスを大きく変革する必要がなく、 既存のシステムに対して新しい業務プロセスを付け加える場合には、そこそこ使われている手法かと思います。 まとまった予算がでる、基幹システムごとの刷新の場合はテクノロジーを統一してのつくりかえを提案しますが、 いままでの業務プロセスに付加する形で提案する場合は、新システムへの移行のオーバーヘッドを考えると(システムのUIを変えた量に比例して、社員が新しいユーザーインターフェースの操作を覚えるコストも大きくなる)、 既存のシステムをある程度残しつつという形の提案をとるところが多いと思います。 ご参考までに。
お礼
わざわざ補足回答まで頂いたのに、 レスポンスが遅くなり申し訳ありません。 アドバイス頂いた方法、教えて頂いたサイトの情報も 参考にし、検討したいと思います。 大変ありがとうございました。
- hidebu-
- ベストアンサー率53% (45/84)
参考ですが 「1、WebサーバーよりActiveXをダウンロード」 「2、ActiveXがクライアント内の規定の場所にWinアプリが存在するか調べる。」 ここまでは普通に実装できるかと思います 「3、なければ、ActiveXからソケット通信によりHTTPサーバーに接続しWinアプリや設定ファイルをダウンロードし、クライアントにコピーする」 に関しては、ブラウザにIEを使用するのであれば、WinInetを使用するのが楽かと思います。 参考URLとして http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/ http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page3.html になりますかね。 「4、Winアプリをキックする。 5、Winアプリより先にActiveXが破棄されたときは、Winアプリに破棄メッセージを通知する」 といったところは CreateProcess ShellExecute といったAPIを使用することになると思います。 参考URLとしては http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_createprocess.asp?frame=true http://www11.ocn.ne.jp/~ikalu/win32api/0008.html http://oshiete1.goo.ne.jp/kotaeru.php3?q=1040360&rev=1 この辺を組み合わせて、少し味付けすれば大丈夫だと思います。
- hidebu-
- ベストアンサー率53% (45/84)
各クライアントに既存のWinアプリがインストールされているのであれば、工数のことを考えても流用するほうがいいかと思います。 そして、WebアプリとWinアプリをつなぐ制御用のActiveXを開発し、 そのActiveXよりクライアントのWinアプリを制御するといった方法が一番安上がりになるかと思います。 またインストールされていなくても、ActiveXを使用して、クライアント内にWinアプリがなければ、サーバーよりアプリをダウンロードしてクライアントに自動でセットアップするという芸当もできるかと思います 開発する側の論理でいけば、同じテクノロジでまとめたいという気持ちはわかりますが、 対費用効果を考えると、劇的な要件変更要求がないかぎり工数のかかる方法は避けるべきかと思います。
補足
回答ありがとうございます。 私の知識では、既存のWinアプリ自体をActiveXコントロールとして、移植するものしかないと捉えていました。 回答に挙げらて頂いた手法について、ぜひ調べてみたいと思います。 参考となるWebサイトがありましたら、教えていただけないでしょうか? よろしくお願い致します。
- 12m24
- ベストアンサー率23% (193/817)
正直にいって、私も全部JAVAするとか、環境を統一したほうがいいと思います。極端な話ですが、Excelファイルにするのも一興です。やっていることが同じですし・・・。 もし、顧客に相談しても聞く耳を持たないとか、すでに開発してるが時間がないとかですと、今のままのほうがいいと思います。
お礼
早速の回答ありがとうございます。 やはり、そう思われますか? グラフ作成/表示については、Java用のツールがフリーであるので、それを使えそうですし・・・。 それも一つの選択肢として、検討したいと思います。
お礼
詳細な説明ありがとうございます。 処理概要、処理の流れがイメージでき、大変参考になりました。 恐らく、顧客も同じイメージを持っているのではないかと思っております(同じような事例は結構あるものなのでしょうか?)。 具体的な実装方法は、MSDNなどで調べてみたいと思います。 大変助かりました。