- ベストアンサー
ASPからのEXEファイル起動
VBScriptで作ったASPからVisualBasicで作ったEXEファイルを起動するプログラムを作りました。 そこでEXEファイルを起動する際にASPで持ってる情報(ユーザID)を 起動をかけるEXEに渡したいのですがうまくいきません。 DOS画面より >C:\abc.exe 10 とうつとパラメータ 10が引きわたり正常に起動します。 ところがWEBから Response.Redirect("C:\abc.exe 10")とやると ページが見つかりませんとなります。 ちなみに Response.Redirect("C:\abc.exe")だと パラメータの受け渡しはありませんが起動はできます。 何がいけないんでしょうか・・・? ご教授願います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>もしよろしければこの処理のどのへんが危険か >教えてもらえると参考になります。 警告画面なしに実行できるのであればの話でした。 >パラメータを渡さなければ普通にダウンロード画面が >出て起動できます。 "開く"を選択した場合ですね。(その後警告が出てOKして) ブラウザはローカルのc:\abc.exeをコピーして、実行しているだけです。 >サーバー側に格納されているEXEを >クライアントがダウンロードして使用する と違うでしょう。 >他の起動方法を考えないといけないですね。 (1)VB6でActiveXを作る。 パラメータはプロパティで渡す。 (2)VB.NETで作る。(ノータッチ・デプロイメント) Windows FormプロジェクトでEXEを作って、wwwrootの下に置けば、 Response.Redirect("abc.exe?id=1") で、クライアント側にダウンロードしてEXEが動きます。 警告画面は出ません。 条件は EXEがファイル操作など、セキュリティに違反しないこと。 クライアント側に.NET Frameworkが必要、ブラウザはIE限定。 サーバ側の条件はありません。(Linux+ApacheでもOK)
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#3の補足について >これはIDが1~10まであったら実体も >abc1.exe ~ abc10.exe を用意するという意味でし>ょうか? >(たぶん違いますよね、すいません) そういう意味です、すみません。 ユーザーがたくさんいた時には使えませんよね。 接続時に abc.exe をコピーする 接続が切れたら削除するとしても 削除するタイミングが難しいですね。 確か、NT系列でもUNIXみたいに、(実体が)ファイルへのリンクであるようなファイルも作れたような気もしますが。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ちょっと考えてみたんですが、 アプリケーションプログラムから 起動した時の自分の名前って確かプログラムからゲットできますよね。 だったら、 abc10.exe とか名前を変更して(実体はコピーすることになる) 実行してみてはどうでしょう? ちなみに、 Response.Redirect("C:\abc.exe") みたいな用法は、やはり、CGIとして使う時の用法みたいですね。 ディレクトリのアクセス権が読み取り可になっているとユーザー側でダウンロードして実行できるというようなことが書いてあります。(実行のみできるディレクトリに置くべきだと註があります。フルパスは使うべきではないかもしれませんね。) ちなみに、.NETで作成したアプリは、単なるリンクで実行できます。まあ、これも、同じ使い方ですね。 こうしたプログラムをユーザー側で(いきなり)実行できるということは、セキュリティ上問題あるように思えますが、 .NETのプログラムで試したところ、ユーザー側の環境については、削除したりというようなことはできないようです。 参考まで
補足
>abc10.exe >とか名前を変更して(実体はコピーすることになる) >実行してみてはどうでしょう? これはIDが1~10まであったら実体も abc1.exe ~ abc10.exe を用意するという意味でしょうか? (たぶん違いますよね、すいません)
- todo36
- ベストアンサー率58% (728/1234)
EXEを動かすのはサーバ側?クライアント側? >ちなみに >Response.Redirect("C:\abc.exe")だと >パラメータの受け渡しはありませんが起動はできます。 通常はResponse.RedirectにURL(相対指定も可能)を書きます。 Response.RedirectにフルパスでEXEをするのは、始めてみたけど、すごい発想ですね。 本当に動くの? クライアント側でEXEを起動する? 本当に動くなら、セキュリティホールですね。恐ろしや。 こちらで試した限りは、ダウンロード画面が出て クライアント側のEXEがダウンロードされる。 これもかなり気持ち悪い。
補足
EXEを動かすのはクライアント側です。 サーバー側に格納されているEXEを クライアントがダウンロードして使用するといった 感じです。 パラメータを渡さなければ普通にダウンロード画面が 出て起動できます。 もしよろしければこの処理のどのへんが危険か 教えてもらえると参考になります。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Set WshShell = CreateObject("WScript.Shell") WshShell.Run("c:\abc.exe 10") では、だめですか? >何がいけないんでしょうか・・・? Response.Redirectって引数は通常URLですよね。 abc.exeがCGIとして動作するなら abc.exe?no=10 とかで動作するのかもしれませんが、 abc.exe 10では動作しないのは当然のような気がします。
補足
abc.exeはCGIではなくクライアントマシンで動く 実体そのものです。 たしかに通常はURLだと思いますが なぜかredirectを使用しています・・・。 他の起動方法を考えないといけないですね。 とりあえず教えていただいた方法をやってみます。 ありがとうございます。
補足
クライアントから見たEXEの実行の仕組みは おっしゃるとおりですね。 起動方法案もせっかく出していただいたのですが 現状、このような作り変えは厳しいです。 みなさんからいろいろ意見を頂いて、また少し違った 角度から対応方法を考えられそうです。 しばらく自力で頑張ってみます。