tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルネットワーク上の他のPCにあるプログラムの起動
記事No14143
投稿日: 2009/10/09(Fri) 09:00
投稿者sakusaku
お世話になっております。
説明がうまくできるか不安ですが、よろしくお願いします。

   ワークグループ1  ワークグループ2
PC1−−−−−−ーPC2−ー−−−−−ファイルサーバ

現在、上記のようなネットワークの構成になっており
ファイルサーバからPC1へファイルをコピーする
プログラムを作っています。
PC1からはファイルサーバが見えないため、PC2にて
ファイルコピーのプログラムを動作させており、正常に
ファイルがコピーされています。
が、ファイルサーバへつながっているPCを操作していることに
危険性を感じますので、PC1からPC2に入っている
プログラムを実行したところ、コピー元のファイルが
見つからないエラーになってしまいます。
試しにPC2に置いてあるファイルコピープログラムを
実行するためのファイルを作り、PC2に置いて、
その起動プログラムをPC1から実行してみましたが
結果は同じでした。
PC2に置いたプログラムをPC1から実行し、PC2から
実行されたような動きをさせるにはどうしたらいいのでしょうか?

よろしくお願いします。

[ツリー表示へ]
タイトルRe: ネットワーク上の他のPCにあるプログラムの起動
記事No14145
投稿日: 2009/10/09(Fri) 15:41
投稿者へつ
> ファイルサーバへつながっているPCを操作していることに
> PC1からPC2に入っている
> プログラムを実行したところ、コピー元のファイルが
> 見つからないエラーになってしまいます。

PC1から、PC2上の実行ファイルないしショートカットを実行しているということですか?
だとしたら、ご自身で書いているように、
PC1からはファイルサーバのファイルが見えないのですから、
コピーできないのは当然かと思いますが。

PC1から、PC2上で実行されている、ファイルコピープログラムをキックする別プログラムに、
なんらかの通信データを送っているということであれば、
PC2上に正しく情報がいっているか、正しくキックできているか、
を切り分けるべきだと思います。

[ツリー表示へ]
タイトルRe^2: ネットワーク上の他のPCにあるプログラムの起動
記事No14147
投稿日: 2009/10/09(Fri) 16:13
投稿者sakusaku
ご回答ありがとうございます

> PC1から、PC2上の実行ファイルないしショートカットを実行しているということですか?

その通りです

> PC1から、PC2上で実行されている、ファイルコピープログラムをキックする別プログラムに、
> なんらかの通信データを送っているということであれば、

そんな大層なものではなくて、ただのshell関数です
コードを下記に記します
Sub Main()
    Dim ret As Long
    
    ret = Shell("D:\空調帳票保存\空調帳票保存.exe", vbMinimizedNoFocus)
End Sub

> PC2上に正しく情報がいっているか、正しくキックできているか、
> を切り分けるべきだと思います。

先ほど検証していてわかったことなのですが、上記のコードを
PC2に置いてPC1から実行するとPC1のDドライブを
探しに行ってしまい、Shell関数が失敗します

PC2に置いてあるファイルコピープログラムをPC2で実行すれば
きちんと動作するので、これをPC1から実行をかけて、あたかも
PC2から実行されたように動かすにはどのようにすればいいのでしょうか?

よろしくお願いします

[ツリー表示へ]
タイトルRe^3: ネットワーク上の他のPCにあるプログラムの起動
記事No14149
投稿日: 2009/10/09(Fri) 16:21
投稿者へつ
へつです。

> Sub Main()
>     Dim ret As Long
>    
>     ret = Shell("D:\空調帳票保存\空調帳票保存.exe", vbMinimizedNoFocus)
> End Sub
>

それは、PC1でショートカット実行するのと変わらないかと。
ファイルコピープログラムをキックするのは、PC2上のプログラムである必要があります。

たとえば、上でも書きましたが、
PC1上で実行されているプログラムAとPC2で実行されているプログラムBを用意して、
・プログラムAとプログラムBが通信を行い、
・プログラムBがファイルコピープログラムを実行(Shell関数でいいと思います)

するようにしないといけないかと。

[ツリー表示へ]
タイトルRe^4: ネットワーク上の他のPCにあるプログラムの起動
記事No14150
投稿日: 2009/10/09(Fri) 16:56
投稿者sakusaku
ご回答ありがとうございます

> ファイルコピープログラムをキックするのは、PC2上のプログラムである必要があります。

それを実現しようとShell関数で前述のコードを作りましたがだめでした

> PC1上で実行されているプログラムAとPC2で実行されているプログラムBを用意して、

プログラムBは実行されている必要はありますか?
必要な時だけPC1から実行するのではだめですか?

> ・プログラムAとプログラムBが通信を行い、

ここが一番のミソかと思いますが、どのような通信なのか
まったく見当もつきません

> ・プログラムBがファイルコピープログラムを実行(Shell関数でいいと思います)

これは前述のコードで大丈夫でしょうか?


よろしくお願いします

[ツリー表示へ]
タイトルRe^5: ネットワーク上の他のPCにあるプログラムの起動
記事No14169
投稿日: 2009/10/14(Wed) 15:45
投稿者へつ
へつです。

同じことの繰り返しになりますが
「PC2上のプログラム」というのは、「PC2に置いてあるプログラム」ではなく、
「PC2で実行されているプログラム」のことです。

PC1からPC2上のファイルを実行しても、プロセスはPC1上になります。

> プログラムBは実行されている必要はありますか?
> 必要な時だけPC1から実行するのではだめですか?

通常、待受プログラムは常駐するものだと思いますが、
必要なときだけ、PC1からリモートデスクトップでPC2に入って、
PC2上で実行するのならよいかと。


とりあえず、まずは、
「PC2上で実行されているプログラム」と
「PC2上に置かれている(そしてPC1上で実行している)プログラム」の
違いをきちんととらえていただくことが大事かと。

[ツリー表示へ]
タイトルRe: ネットワーク上の他のPCにあるプログラムの起動
記事No14161
投稿日: 2009/10/13(Tue) 12:42
投稿者sakusaku
この連休でいろいろと調べて、いくつか方法があったのですが

RSH・・・リモート側でRSHデーモンを動かさなければいけない
Winsock・・・リモート側で信号を受け取る常駐プログラムを
       走らせておかないといけない
WMI・・・WinXPSP2だとリモート側の設定が必要

というわけで、リモート側でなにかしらの細工をしないといけない
ものばかりで、できればリモート側には手をかけないで実現
できればと思ってたのですが、やはりそんなことが簡単に
できてしまえばウイルスに対して弱いシステムになってしまいますから
なかなか難しいところですね

[ツリー表示へ]