CreateProcessについて

解決


yasu  2004-04-01 02:01:20  No: 8131

CreateProcessについて教えてください。

前回、外部システム連携でQ/Aを投げたのですがその時は
VBのexeで動作確認が取れていたのですが、今回はVBスクリプト
を起動させようとしたのですがエラーが発生してうまく動作が
できません。(Excelを単純に起動させようとしてもだめでした)
単純にPathを変えるだけではだめなのでしょうか?

begin
  GetStartupInfo(SI);
  If Not CreateProcess('C:\work\CMI\SRC\Unit1\test.vbs',
                       nil,
                       nil,
                       nil,
                       False,
                       CREATE_DEFAULT_ERROR_MODE,
                       nil,
                       nil,
                       SI,
                       PI) then
    Raise Exception.Create('Exec Error ' + IntToStr(GetLastError));
  While WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
    Application.ProcessMessages;
end;


jok  2004-04-01 03:22:54  No: 8132

VBスクリプトはつかったことないですけど、一般にスクリプトファイルはそれ単独
では動作しないのでは? Perl や Java でもスクリプトエンジンやVMにスクリプト
を渡さないと実行されませんよね。このファイル

'C:\work\CMI\SRC\Unit1\test.vbs'

をエクスプローラで見るとそれらしいアイコンがついていますか? もし関連づけ
ができているなら CreateProcess() ではなく ShellExecute で起動出来る
かもしれません。google で ShellExecute Delphi で検索するといっぱい
例が見つかります。


jok  2004-04-01 03:24:37  No: 8133

ShellExecute で起動できるかどうかは、エクスプローラからダブルクリックして
実行できるかどうかで確認できます。


yasu  2004-04-01 03:48:07  No: 8134

jokさんありがとうございます。

ShellExecuteを使ったらスクリプトが起動しました。
ちなみにShellExecuteに引数を渡すとしたら実行ファイル名の
後に引数を記述すればよろしいのでしょうか?
ShellExecute(Handle, 'OPEN', 'C:\work\SRC\Unit1\test.vbs', 'Edit1.Text', '', SW_SHOW);


jok  2004-04-01 03:59:53  No: 8135

>ShellExecute(Handle, 'OPEN', 'C:\work\SRC\Unit1\test.vbs', 'Edit1.Text', '', SW_SHOW);

3番目がコマンドラインパラメータですが、'Edit1.Text' こんな文字列を
渡したいのですか? PChar(Edit1.Text) だと思うんですけど。
4番目は '' ではなく、nil を設定してください。


jok  2004-04-01 21:59:43  No: 8136

すみません、上のコメント、一つずつずれてますね。
3番目  →  4番目
4番目  →  5番目
に訂正します。


yasu  2004-04-02 22:27:56  No: 8137

jokさんありがとうございます。

ShellExecute(Handle,
             'OPEN',
             'C:\work\CMI\SRC\Unit1\Project2.exe',
             'PChar(test)',
             'nil',
             SW_SHOW);
これでVBで引数を取得することができました。
あとはVBスクリプト自体の起動確認はできているので
スクリプト側でどのようにやれば引数を取得できるか調査中です。


yasu  2004-04-03 00:51:17  No: 8138

ShellExecute(Handle,
             'OPEN',
             'C:\work\CMI\SRC\Unit1\test.vbs',
             'PChar(test)',
             nil,
             SW_SHOW);

でVBスクリプトへ引数を渡すことが確認できました。
ありがとうございます。

そこでもう一つ質問があります。

今回はtestという引数一つだけだったのですが複数の引数を渡す
場合はどのようにすればよろしいのでしょうか?


yasu  2004-04-03 01:51:25  No: 8139

解決いたしました。

ShellExecute(Handle,
             'OPEN',
             'C:\work\CMI\SRC\Unit1\test.vbs',
              PChar(test +' '+ test2+' '+test3),
             nil,
             SW_SHOW);
でVBスクリプト側に複数の引数を渡すことが確認できました。

jokさん今回はいろいろありがとうございました。
また、わからないことがありましたらご教授願います。


yasu  2004-04-03 01:52:21  No: 8140

解決済み


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加