C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 別サーバーにあるEXEファイルを起動する方法


(過去ログ 83 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■49228 / inTopicNo.1)  別サーバーにあるEXEファイルを起動する方法
  
□投稿者/ yoco (3回)-(2010/04/27(Tue) 16:12:33)

分類:[VB.NET/VB2005 以降] 

お世話になります。

別サーバーにあるEXEファイルを、配置されているサーバー上で実行したいのですが
方法がわからず投稿させていただきました。

現在、Shell関数で実行しているのですが、実行している環境で起動してしまいます。

【コード】
 Dim iRet As Integer
 
 iRet = Shell("D:\work\text.exe", vbNormalFocus)

上記のコード内で指定している "D:\work\text.exe" ですが、
このまま実行すると、実行環境の "D:\work\text.exe" を起動してしまいます。

別サーバーの "D:\work\text.exe" を実行するには、どうすればよいのか
ご教授お願いします。

初心者ですので説明不足な点があるかと思いますが、宜しくご指導願います(*・ω・)*_ _)ペコリ

(環境)
Access2000 WindowsXP SP2
引用返信 編集キー/
■49229 / inTopicNo.2)  Re[1]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ ごう (94回)-(2010/04/27(Tue) 16:17:30)
> 別サーバーの "D:\work\text.exe" を実行するには、どうすればよいのか
> ご教授お願いします。

"(別サーバのアドレス)\text.exe"ってやってみましたか?

あくまで、たとえばだけど
"\\192.168.○.○\△△\test.exe"って感じで。
引用返信 編集キー/
■49230 / inTopicNo.3)  Re[1]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ 中博俊 (1394回)-(2010/04/27(Tue) 16:19:04)
別サーバーとはどういう関係?
なぜそっちのサーバーで起動しないといけない?
自動で起動したいの?人が起動したいの?
すごーく簡単に考えてそうだけど、そんなに簡単じゃない答えが待っている可能性が高い・・・
引用返信 編集キー/
■49231 / inTopicNo.4)  Re[2]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ door (3回)-(2010/04/27(Tue) 16:24:16)
もとの質問に書いてありますが、念のため。
"サーバーにあるEXE"を、"サーバー上で実行"したいんですか?
つまり、別PC上で勝手にEXEが起動されるイメージでしょうか?

ちょっと難しいことになりそうな気もするので、
質問の背景などを教えてくれたほうがいいかもしれないです。




No49229 (ごう さん) に返信
>>別サーバーの "D:\work\text.exe" を実行するには、どうすればよいのか
>>ご教授お願いします。
>
> "(別サーバのアドレス)\text.exe"ってやってみましたか?
>
> あくまで、たとえばだけど
> "\\192.168.○.○\△△\test.exe"って感じで。
引用返信 編集キー/
■49232 / inTopicNo.5)  Re[2]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (5回)-(2010/04/27(Tue) 16:25:22)
No49229 (ごう さん) に返信

ごう さん

お返事ありがとうございます。

> "(別サーバのアドレス)\text.exe"ってやってみましたか?
>
> あくまで、たとえばだけど
> "\\192.168.○.○\△△\test.exe"って感じで。

試してみましたが上手くいきませんでした。
プログラム内でログを出力しているのですが、そのログの出力先も
"D:\○○○" になっておりDドライブを指しているので、実行環境のDドライブに
ログが出力されてしまいました。

このプログラム内のパス(ログの出力先等)を変更する事はできませんので
悩んでいます。

引用返信 編集キー/
■49233 / inTopicNo.6)  Re[3]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (6回)-(2010/04/27(Tue) 16:41:10)
No49230 (中博俊 さん) に返信
No49231 (door さん) に返信

中博俊 さん、door さん
お返事ありがとうございます。

この質問の背景をお伝えしますと。。。

VBで作成したアプリケーションが出力したログを参照して、エラーとなっている場合は
その処理を「手動で再実行する」というツールをAccess2000で作成しています。

VBアプリとログは同じサーバーに配置されています。(仮にAとします。)
作成しているツールは、別のサーバーに配置します。(仮にBとします。)

このアプリケーションに対して、引数を渡しているのですが
その引数の中にはファイル名(フルパス)も入っています。

このファイル自体は、Aサーバー,Bサーバーとは別のサーバーに配置されています。(仮にCとします。)

手動でアプリケーションを再実行したあと、ログの内容を更新して処理がうまくいったかどうかを
ツール上で確認します。

現在のコードですと、再実行した後のログが実行環境に出力されてしまいます。

このような現象から、VBアプリケーションが配置されているサーバー上で実行させたいのですが
やはり難しいのでしょうか・・・('・c_・` ;)

(環境)
Aサーバー:Windows Server2003
Bサーバー:Windows Server2003
Cサーバー:Linux



引用返信 編集キー/
■49234 / inTopicNo.7)  Re[3]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (7回)-(2010/04/27(Tue) 16:44:04)
【追伸】

> つまり、別PC上で勝手にEXEが起動されるイメージでしょうか?

EXEが実行するトリガーは、画面上のボタン押下ですが
実現したいイメージはおっしゃるとおりです。
引用返信 編集キー/
■49235 / inTopicNo.8)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ todo (7回)-(2010/04/27(Tue) 17:29:06)
> 別サーバーの "D:\work\text.exe" を実行するには、どうすればよいのか

exeをキックするだけでよいなら、コントロールパネルのタスクにexeを登録しておいて、リモートでそのタスクを実行するとか。

引用返信 編集キー/
■49244 / inTopicNo.9)  Re[1]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ Jitta (641回)-(2010/04/27(Tue) 22:31:15)
No49228 (yoco さん) に返信
>
> 上記のコード内で指定している "D:\work\text.exe" ですが、
> このまま実行すると、実行環境の "D:\work\text.exe" を起動してしまいます。
>
> 別サーバーの "D:\work\text.exe" を実行するには、どうすればよいのか
> ご教授お願いします。

 「別サーバー」を、自分のPCと考えてみると、、、どこかのスパイが私のコンピュータの中の実行ファイルを勝手に実行できるのだとすると、とても怖いです。。。ってなことを、要望されていると、理解されているでしょうか。
(なので、「すごーく簡単に考えてそうだけど、そんなに簡単じゃない答えが待っている可能性が高い・・・」といわれています)
引用返信 編集キー/
■49247 / inTopicNo.10)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ Azulean (551回)-(2010/04/28(Wed) 00:21:26)
No49233 (yoco さん) に返信
> VBアプリとログは同じサーバーに配置されています。(仮にAとします。)
> 作成しているツールは、別のサーバーに配置します。(仮にBとします。)
(略)
> このような現象から、VBアプリケーションが配置されているサーバー上で実行させたいのです

任意のタイミングで実行したいのであれば、A サーバーと呼ばれるものに、外部からの通信を受け付け、プログラムを実行する機能を持つ常駐型のプログラムが必要になります。
ただし、すでに書かれているように、その作りが甘いと、悪意ある第三者に悪用される可能性があります。
引用返信 編集キー/
■49251 / inTopicNo.11)  Re[2]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (9回)-(2010/04/28(Wed) 10:10:45)
No49244 (Jitta さん) に返信

Jitta さん
お返事ありがとうございます。

>  「別サーバー」を、自分のPCと考えてみると、、、どこかのスパイが私のコンピュータの中の実行ファイルを勝手に実行できるのだとすると、とても怖いです。。。ってなことを、要望されていると、理解されているでしょうか。
> (なので、「すごーく簡単に考えてそうだけど、そんなに簡単じゃない答えが待っている可能性が高い・・・」といわれています)

もちろん認識しています。
なので、ネットで調べても簡単に方法が見つからないので質問させていただいている次第です。。。
引用返信 編集キー/
■49252 / inTopicNo.12)  Re[5]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (10回)-(2010/04/28(Wed) 10:16:15)
No49247 (Azulean さん) に返信

Azulean さん
お返事ありがとうございます。

> 任意のタイミングで実行したいのであれば、A サーバーと呼ばれるものに、外部からの通信を受け付け、プログラムを実行する機能を持つ常駐型のプログラムが必要になります。
> ただし、すでに書かれているように、その作りが甘いと、悪意ある第三者に悪用される可能性があります。

認識しています。
余談ですが、当ツールは課内の限られた人しか使用できないように権限を設定しております。
引用返信 編集キー/
■49258 / inTopicNo.13)  Re[3]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ 中博俊 (1396回)-(2010/04/28(Wed) 12:22:35)
単純にリモートデスクトップじゃだめなんですか?
引用返信 編集キー/
■49261 / inTopicNo.14)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ door (4回)-(2010/04/28(Wed) 13:11:23)
やるなら、
Azuleanさんが書かれたように、
・Aサーバーに、監視用のプログラムを配置する(これも自身で作成する)
・Bサーバーから、Socketなど、適当なもので通信して、Aサーバーで動いている監視プログラムにメッセージを投げる。
・監視用のプログラムは、メッセージ内容を解析して引数を生成して、自身のPC(A)にあるEXEを実行する。
こんな感じですかね。

もしくは、Aサーバーにバッチなどのタスクを用意して、
BからTELNETで呼び出すとか。
(すみません。これはやったことないので詳しくは分かりません。
 でも、できるならこっちのほうが簡単な気もしますね。)
引用返信 編集キー/
■49285 / inTopicNo.15)  Re[3]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ Jitta (643回)-(2010/04/28(Wed) 23:07:41)
No49251 (yoco さん) に返信
> なので、ネットで調べても簡単に方法が見つからないので質問させていただいている次第です。。。

 小言から入りますが、ご容赦ください。
 質問するときには、質問に至った背景を書いていただけると助かります。今回の場合は、次の点です。

* 調べた内容
  検索に使った単語や、参照したページがあれば、「そこはもう見ました」を防げる。
* なぜ、質問内容の事をしたいのか
No 49233 の内容。これがあることで、直接的な回答がない場合に、間接的あるいは類似の手段が提示できる。
* 社内でのみ使用する
→ 社外からはF/W等で守られており、一般的な悪意を持った人からは守られていることがわかる。
→ 回答者が、「脆弱性を広めた」という自責の念から解放される←これ重要


 No 49235 で、todoさんから「タスクに登録しておいて、キックする」方法が示されていますが、タスクに対してリモートからリクエストする方法を私は知りませんので、私が過去に行ったことがある方法のひとつを紹介します。

 Remote Procedure Call を使います。私が使用したのは UNIX でしたし、20年近く前のことなので、現在の Windows でどうやって使用するのかはわからないので、他の方法を考えます。(RPC サービスというのがあるから、出来るはず)

 TCP または UDP のポートをひとつ作り、そこを監視して、何らかのコマンドが送られてくるまで待つサービスを作成します。このサービスに対してリクエストを送るアプリケーションを作ります。No 49247 でAzuleanさんが書かれている内容です。「サービス」としたのは、誰もログオンしていなくても起動していなければならないと思われるからです。
 当然、サービス、または使用するポートを、F/Wに登録してデータが流れるようにしなければなりません。また、サービス側では、何らかの方法でコマンド送信者が「課内の限られた人」であることを認識出来る仕組みを作り込む必要があります。そのコマンドにたどり着けるのが限られた人だけ、ということでは不十分です。ネットワーク上のパケットは、誰でも作って流すことが出来るからです。

引用返信 編集キー/
■49305 / inTopicNo.16)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ ちゃっぴ (9回)-(2010/04/29(Thu) 15:05:18)
ちゃっぴ さんの Web サイト
2010/04/29(Thu) 15:31:07 編集(投稿者)
2010/04/29(Thu) 15:16:03 編集(投稿者)

Remote 実行を行いたいとのことですが、実現する手段は多数存在し、実現できる内容、手間等も様々です。
思いついたもの下記に列挙しておきます。

[Category 1]
Remote で executable file を実行
実行結果の返却、待ち合わせ不要

・ Schtasks
http://technet.microsoft.com/ja-jp/library/cc725744(WS.10).aspx

・ Create Method of the Win32_Process Class
http://msdn.microsoft.com/en-us/library/aa389388.aspx

[Category 2]
Remote で executable file を実行
実行結果の返却、待ち合わせ必要

・ WinRM
WinRM 環境を構築し、winrs.exe で実行

Using WinRS
http://technet.microsoft.com/en-us/library/dd163506.aspx

[Category 3]
拡張性とかよりきめ細かいものを求めるなら

・ WCF
・ Web Service
・ .NET Remoting
・ MSMQ
・ DCOM

Category 1, 2 のものは基本的に管理用途を想定しているので、既定の ACL では管理者のみしか扱えません。管理者以外で利用可能にするためには ACL を緩和する必要があります。ただし、WMI や WinRM の ACL を緩和した場合にはどのような process でも呼び出し可能になってしまうので注意が必要でしょう。
File の ACL で制御掛けることはできますが。。。面倒。

Task Scheduler を利用する方式の場合、job 毎に ACL で制限できます。

管理目的で無いのであれば、Category 3 の方法を利用するべきでしょうね。
引用返信 編集キー/
■49324 / inTopicNo.17)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (11回)-(2010/04/30(Fri) 10:43:34)
No49285 (Jitta さん) に返信
> ■No49251 (yoco さん) に返信
>>なので、ネットで調べても簡単に方法が見つからないので質問させていただいている次第です。。。
>
>  小言から入りますが、ご容赦ください。
>  質問するときには、質問に至った背景を書いていただけると助かります。今回の場合は、次の点です。
>
> * 調べた内容
>   検索に使った単語や、参照したページがあれば、「そこはもう見ました」を防げる。
> * なぜ、質問内容の事をしたいのか
> → No 49233 の内容。これがあることで、直接的な回答がない場合に、間接的あるいは類似の手段が提示できる。
> * 社内でのみ使用する
> → 社外からはF/W等で守られており、一般的な悪意を持った人からは守られていることがわかる。
> → 回答者が、「脆弱性を広めた」という自責の念から解放される←これ重要
>
>
>  No 49235 で、todoさんから「タスクに登録しておいて、キックする」方法が示されていますが、タスクに対してリモートからリクエストする方法を私は知りませんので、私が過去に行ったことがある方法のひとつを紹介します。
>
>  Remote Procedure Call を使います。私が使用したのは UNIX でしたし、20年近く前のことなので、現在の Windows でどうやって使用するのかはわからないので、他の方法を考えます。(RPC サービスというのがあるから、出来るはず)
>
>  TCP または UDP のポートをひとつ作り、そこを監視して、何らかのコマンドが送られてくるまで待つサービスを作成します。このサービスに対してリクエストを送るアプリケーションを作ります。No 49247 でAzuleanさんが書かれている内容です。「サービス」としたのは、誰もログオンしていなくても起動していなければならないと思われるからです。
>  当然、サービス、または使用するポートを、F/Wに登録してデータが流れるようにしなければなりません。また、サービス側では、何らかの方法でコマンド送信者が「課内の限られた人」であることを認識出来る仕組みを作り込む必要があります。そのコマンドにたどり着けるのが限られた人だけ、ということでは不十分です。ネットワーク上のパケットは、誰でも作って流すことが出来るからです。
>
引用返信 編集キー/
■49325 / inTopicNo.18)  Re[4]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (12回)-(2010/04/30(Fri) 10:47:23)
↑上記、投稿ミスってしまいました。
すみません。。。

No49285 (Jitta さん) に返信

Jitta さん
お返事ありがとうございます。

>  小言から入りますが、ご容赦ください。
>  質問するときには、質問に至った背景を書いていただけると助かります。今回の場合は、次の点です。
>
> * 調べた内容
>   検索に使った単語や、参照したページがあれば、「そこはもう見ました」を防げる。
> * なぜ、質問内容の事をしたいのか
> → No 49233 の内容。これがあることで、直接的な回答がない場合に、間接的あるいは類似の手段が提示できる。
> * 社内でのみ使用する
> → 社外からはF/W等で守られており、一般的な悪意を持った人からは守られていることがわかる。
> → 回答者が、「脆弱性を広めた」という自責の念から解放される←これ重要
>

ご指摘の通りでお恥ずかしい限りです。
以後、気をつけます。
ご指摘ありがとうございました(*・ω・)*_ _)ペコリ
引用返信 編集キー/
■49326 / inTopicNo.19)  Re[5]: 別サーバーにあるEXEファイルを起動する方法
□投稿者/ yoco (13回)-(2010/04/30(Fri) 10:57:18)
ごう さん
中博俊 さん
door さん
todo さん
Jitta さん
Azulean さん
ちゃっぴ さん

みなさん、お返事ありがとうございました。

まだ懸念事項が残るものの、以下の方法で『別サーバー(A)上のアプリをAサーバーにて実行』することが
確認できましたので、解決済みとさせていただきます。

1.Aサーバー上に、起動するアプリのパスを記述したバッチファイルを作成する
2.バッチファイルをキックするスクリプトファイルを作成し、プログラム内でスクリプトファイルを実行する
  (スクリプト内でAサーバーにリモート接続しています。)

みなさんがおっしゃるように、セキュリティ面など問題は残りますが。。。
とりあえずは実行できました。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -