No.5ベストアンサー
- 回答日時:
No1で回答した者です。
なるほど、サーバサイドで実行したいとのことですね。
となりますと、クライアントからのShell呼び出しは、
クライアント実装なので、NG。
ソフトがサーバにあっても、クライアントインスタンスで
動作します。
簡単な例えで言いますと。
Webサーバでもなんでもそうですが、別の筺体のプログラムを
遠隔で処理できるようにするには、やはり。
「サーバ側で常に待ち構えている(という意味で"Server")ソフト」
と、「クライアントでトリガを発行するソフト」という2本立ての
手段をとります。
なぜ遠隔操作するのに「サーバ待ち構えソフト」が必要かというと、
ごく単純にセキュリティの問題で。
VBAのShell関数くんだりで、Delete 遠隔Fileコマンドなど発行
されると、YahooでもGoogleでも遠隔で削除できてしまうので
迷惑極まりないと。
よって、そうできない決まりになっています。
さて。
通常はサーバに対しリクエストをかける方法としては、
Socket通信など、TCP/IPで行うのがセオリーなんですが。
社内LANなど小さい、セキュリティを気にしなくていい
ネットワークでは真似ごととしてこんなやりかたもできます。
1.サーバサイドにバッチファイルを仕込む。
そのバッチは、「どこかWindows共有フォルダに特定の
ファイル名のファイルが入ると別プログラムをキックする
もの」を作ります。
簡単にはVBScriptなどで
If (どこどこのファイルが見つかった) Then
Shell "Notepad.exe" 'メモ帳起動
End If
という短いものでいいです。
2.上記のプログラムは一瞬で終わってしまうので、偽装常駐
させるため、Windowsのタスクで1分ごとにでも常に実行する
設定をします。
常に1分ごとに動作させておきます。
3.VBA側で、サーバの共有フォルダに特定の名前のファイルを
放り込みます。
…この理屈で動きますよね(笑)
実際に、サーバなどという仕組みは。
簡単にいえば、上記1,2の機能を実装したようなソフトで。
…こんなしょうもないもんです。
なんでも試してやってみるといいんじゃないでしょうか?
ちなみに、サーバサイドのプログラムで「"終了"」などの
画面を出すことはよろしくありません。
プログラムがOKを押すまで止まってしまいますよ。
No.4
- 回答日時:
ANo.2 補足へのアドバイスです。
WshRemoteでなくてもサーバの何かを起動するためには、ANo.1 yama-takuさんが書かれていますようにかなりの準備が必要になるでしょう。それが面倒でしたら別の方法を考えた方がよいでしょう。例えばサーバ側ではCOBOLのプログラムを定期的に実行し、クライアント側ではその結果のファイルを参照するとか。
情報が小出しになりますけれども、やはりWshRemoteでやってみようという場合のため、Windows XP SP2での設定方法のリンクを書いておきます。タイトルはWMIですがWshRemoteでも同様の設定が必要です。
Windows XP SP2のWMIに関する問題のトラブルシューティング方法
http://support.microsoft.com/kb/875605/ja
もしWindows XP SP2でワークグループの場合は下記の設定(ForceGuest=0にする)も必要です。
ワークグループにインストールされているWin XP Proでセキュリティを設定する方法
http://support.microsoft.com/default.aspx?scid=k …
面倒ですね。(^^;;;
No.3
- 回答日時:
環境に依存するのでお役に立つかどうかわかりませんけれども、VBAではなくWSH(VBSCriptならVBAと文法は似たようなものです)WshRemoteを使うと他のコンピュータにスクリプトを送って実行できます。
スクリプトは他のコンピュータで実行されます。WshRemoteについては下記の@ITのページが詳しいです。WshControllerオブジェクト、WshRemoteオブジェクト
http://www.atmarkit.co.jp/fwin2k/operation/wsh09 …
ドメインでは経験ありませんがワークグループのWindows XP SP2 Pro同士(admin権限の同じユーザ名、同じパスワード)で試したことはあります。Windows XP SP2ではファイアウォール、及びDCOMを設定する必要があります。
-----
ところでサーバ側で実行するバッチジョブは何をするものでしょうか。最終的に行いたいことがコンピュータの情報の取得でしたらWMI(Microsoft Windows Management Instrumentation)の方が簡単だと思います。
この回答への補足
>サーバ側で実行するバッチジョブは何をするものでしょうか
cobolのプログラムを実行するバッチです。
DCOMとか私には全く理解の範囲を超えています。
また、WshControllerオブジェクト、WshRemoteオブジェクトはレジストリを変更する必要があることが書いてありましたけど、そこまではしたいないですね。
No.2
- 回答日時:
そのバッチに問題があると思います。
クライアントPCからだとフォルダ名が「\\サーバ名\AAAAA\BAT\」になっているように、
バッチの中のコマンドも「dir C:\*.txt」じゃ動きません。なぜならC:が存在しないのです。クライアントからサーバのC:にアクセス権限する権限もないです。バッチの中のコマンドが「dir \\サーバ名\AAAAA\BAT\*.txt」なら動きます。
No.1
- 回答日時:
バッチジョブを「どこで」やりたいかによります。
貴方のソースコードの場合、サーバに存在するバッチファイルを
クライアントで実行するソースになっています。
当初の目的がそれでもいいのであれば、ごく単純にサーバログインの
アカウントが通っていないだけのような気がします。
サーバ上にクライアントのアカウントと権限を振り、かつ、
フォルダにアクセス権限、実行権限を与えれば上記コマンドが
動くと思います。
この場合は「終了!」メッセージはクライアントに表示され、
コマンドもクライアントで実行されます。
また、別途。
上記の「終了!」というメッセージをサーバで表示したい、つまり、
サーバサイドで実行させたい場合は、上記のソースコードでは
無理です。
基本的にクライアントからサーバ上への実行インスタンスを
作ることは直接は不可能ですので、普通はサーバの「常駐サービス」
を用意します。
簡単にいえば、何らかの常駐してコマンドを実行するサーバの
別プログラムに対し、Socket通信でも、Webでもいいので、クライ
アントからトリガとなる「通信」を与えてやる手段をとります。
この回答への補足
yamaーtakuさん、早速ありがとうございます。
バッチジョブはサーバに存在し、そこで実行したいのです。
あくまでクライアントはトリガです。
それが前提なんですが、サーバ側で何か用意する必要があるのですか?
その辺がよく理解できないところなんです。
実をいうと、VBAに関しても素人同然なんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) Excel VBA カーソルを当てた際に表示される”4161”とは 1 2022/04/30 21:53
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ネットワークドライブ上のVBScript
Windows 10
-
コマンドプロンプトから別マシンに命令を投げれるでしょうか
UNIX・Linux
-
エクセルVBAで、バッチ処理を起動すると・・・
Excel(エクセル)
-
-
4
ネットワーク上のコンピュータのファイルを起動させる
その他(プログラミング・Web制作)
-
5
VBSからリモートでbat実行(WMI)
Visual Basic(VBA)
-
6
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
7
BATファイル内で、他のネットワークドライブにある
UNIX・Linux
-
8
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
9
UserForm1.Showでエラーになります。
工学
-
10
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
11
ユーザーアカウントが複数ある場合のタスクスケジュール設定
サーバー
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
ネットワーク越しのEXEファイル実行
Visual Basic(VBA)
-
14
VBscriptが起動しない?
Microsoft ASP
-
15
バッチファイルの内容を表示させない
その他(プログラミング・Web制作)
-
16
ASPを使ってサーバ側のバッチを起動する方法
Microsoft ASP
-
17
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
18
他のPC上にあるexeを、そのPCで起動する方法
C言語・C++・C#
-
19
メッセージを他のPCに出したい
Visual Basic(VBA)
-
20
エクセルVBAでテキストファイル(バッチファイルの作成)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IUSR でCreateObject("Excel.Ap...
-
ActiveXをダウンロードさせてた...
-
VBAでネットワーク上のバッ...
-
LogonUser関数が ERROR_PRIVIL...
-
ctfmon.exe。スタック ベースの...
-
MacBookAir起動時にRubyソース...
-
外部アプリケーション操作
-
デスクトップパソコンのSSD化を...
-
web.configとは?(初心者です)
-
windows10でハンゲーム起動でき...
-
2つの異なるサーバーのDBを扱う
-
VB.NET Oracle接続 クライアン...
-
Program FilesとProgram Files ...
-
GridviewとDataGridviewの違い
-
pixus mp630 ドライバインストール
-
レンタルサーバー上のMySQL
-
IIS
-
新プログラミング言語Dartについて
-
エクスプローラーは動作を停止...
-
BUWはインストールできました。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IIS7.5 Excel ファイルオープ...
-
VBAでネットワーク上のバッ...
-
McAfeeの使い方
-
ASP.NET での処理表示について
-
VBS でユーザ名からそのユーザ...
-
IUSR でCreateObject("Excel.Ap...
-
ASP AccessDBオープン出来ない
-
IISのユーザについて
-
LogonUser関数が ERROR_PRIVIL...
-
googlスライドの編集権限について
-
PowerDVD15のデバイス&ホーム...
-
WinAPIでWindowsの権限を調べる...
-
Windowsサーバー、PHPでアクセ...
-
VC++からのoracle接続方法
-
XAMPPのメニュー画面までたどり...
-
管理者権限のないユーザーだと...
-
MDBのアクセス権
-
ユーザーアカウント制御について
-
Tomcatの設定で困っています。
-
ASP.NETのWEBアプリがクライア...
おすすめ情報