VBScriptから別のexeファイルを実行する方法

解決


のぶこ  2003-01-10 20:18:23  No: 105837  IP: [192.*.*.*]

VBScriptの中でC言語で作成した別のexeファイルを実行
させたいのですが、やり方が分かりません。
中で起動させるプログラム(exe)には起動時に引数が必要です。

Cprogram.exe A B C

こんな感じです。

このプログラムの処理が終わってから次の処理に移りたいので
このプログラムの終了したことを感知する必要があるのです。

何卒宜しくお願いします。

編集    削除
Say  2003-01-10 20:36:18  No: 105838  IP: [192.*.*.*]

Windows Scripting Host 上で実行しているのなら、
WshShellオブジェクトで実現可能です。

編集    削除
のぶこ  2003-01-10 21:28:47  No: 105839  IP: [192.*.*.*]

早速のフォロー有難うございます。
型が一致しません"WshShell"
というエラーが出ます。
VBScriptの実行方法は.vbsという拡張子のファイルを
ダブルクリックして行っています。

編集    削除
Say  2003-01-10 23:28:45  No: 105840  IP: [192.*.*.*]

原因はコードをみないことにはわかりませんが・・・。

例えば、コマンドライン引数を取得してテキストボックスに表示する
VBのExe D:\Say\Command\Project1.exe があったとします。
このExeに文字列"ABCDE"をコマンドラインにわたすには、
メモ帳か何かで

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "D:\Say\Command\Project1.exe ABCDE",,True
Set WshShell = Nothing
MsgBox "おわったよん"


というスクリプトを書いて、WshShellTest.vbs とかいう名前で
保存して、保存したファイルをダブルクリックすれば実行されます。
開いたWindowを閉じると、"おわったよん"とダイアログに表示します。

・・・って、この回答、そのまま「Visual Basic 初心者掲示板」の
「コマンドライン引数を渡すには?」の回答に使えるんでないかい?


戻り値がほしいときは、Runメソッドでなく、Execメソッドを使います。
ただし、Execメソッドを使うにはWSHの最新版(Ver5.6)が必要です。

http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=E74494D3-C4E1-4E18-9C6C-0EA28C9A5D9D

VBで標準出力させるのは面倒なので、
とりあえず、BorlandC++でサンプル作ってコンパイルしました。

//Cサンプル
#include <stdio.h>

int main(int argc , char *argv[])
{
  int i ;
  char j[10]  ;

  for (i = 1; i < argc; i++){ 
    j[i - 1] = *argv[i] ; 
  }
  j[i + 1] = 0 ; 
  printf("%s\n",j);
  return 0 ;
}


コマンドライン引数をくっつけて、標準出力に吐くだけですね。
これをコンパイルして、D:\Say\CWORK\BCCWORK\cmdparam\cmdparam.exe に置きました。
これに、 1   2   3   という引数渡すスクリプトを書いてみます。
出力は   123   になるはずです。


Set WshShell = WScript.CreateObject("WScript.Shell")
Set objExec  = WshShell.Exec("D:\Say\CWORK\BCCWORK\cmdparam\cmdparam.exe 1 2 3")
Do While objExec.Status = 0
     WScript.Sleep 100
Loop
MsgBox objExec.StdOut.Read(3)
Set objExec  = Nothing
Set WshShell = Nothing


というスクリプトを書いて、WshShellTest2.vbs とかいう名前で
保存して、保存したファイルをダブルクリックすれば実行され、
"123"とダイアログに表示します。

編集    削除
のぶこ  2003-01-10 23:47:22  No: 105841  IP: [192.*.*.*]

出来ました!
バッチリです。
Sayさん本当に有難う御座いました。
感謝!感謝!

編集    削除
say  2003-01-17 21:06:49  No: 105842  IP: [192.*.*.*]

解決時にはちゃんとチェックしておきましょう。

編集    削除
Say  2003-01-17 22:01:47  No: 105843  IP: [192.*.*.*]

どなたか知りませんが、「騙り」は禁止行為です。  ↑

編集    削除