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;
VBスクリプトはつかったことないですけど、一般にスクリプトファイルはそれ単独
では動作しないのでは? Perl や Java でもスクリプトエンジンやVMにスクリプト
を渡さないと実行されませんよね。このファイル
'C:\work\CMI\SRC\Unit1\test.vbs'
をエクスプローラで見るとそれらしいアイコンがついていますか? もし関連づけ
ができているなら CreateProcess() ではなく ShellExecute で起動出来る
かもしれません。google で ShellExecute Delphi で検索するといっぱい
例が見つかります。
ShellExecute で起動できるかどうかは、エクスプローラからダブルクリックして
実行できるかどうかで確認できます。
jokさんありがとうございます。
ShellExecuteを使ったらスクリプトが起動しました。
ちなみにShellExecuteに引数を渡すとしたら実行ファイル名の
後に引数を記述すればよろしいのでしょうか?
ShellExecute(Handle, 'OPEN', 'C:\work\SRC\Unit1\test.vbs', 'Edit1.Text', '', SW_SHOW);
>ShellExecute(Handle, 'OPEN', 'C:\work\SRC\Unit1\test.vbs', 'Edit1.Text', '', SW_SHOW);
3番目がコマンドラインパラメータですが、'Edit1.Text' こんな文字列を
渡したいのですか? PChar(Edit1.Text) だと思うんですけど。
4番目は '' ではなく、nil を設定してください。
すみません、上のコメント、一つずつずれてますね。
3番目 → 4番目
4番目 → 5番目
に訂正します。
jokさんありがとうございます。
ShellExecute(Handle,
'OPEN',
'C:\work\CMI\SRC\Unit1\Project2.exe',
'PChar(test)',
'nil',
SW_SHOW);
これでVBで引数を取得することができました。
あとはVBスクリプト自体の起動確認はできているので
スクリプト側でどのようにやれば引数を取得できるか調査中です。
ShellExecute(Handle,
'OPEN',
'C:\work\CMI\SRC\Unit1\test.vbs',
'PChar(test)',
nil,
SW_SHOW);
でVBスクリプトへ引数を渡すことが確認できました。
ありがとうございます。
そこでもう一つ質問があります。
今回はtestという引数一つだけだったのですが複数の引数を渡す
場合はどのようにすればよろしいのでしょうか?
解決いたしました。
ShellExecute(Handle,
'OPEN',
'C:\work\CMI\SRC\Unit1\test.vbs',
PChar(test +' '+ test2+' '+test3),
nil,
SW_SHOW);
でVBスクリプト側に複数の引数を渡すことが確認できました。
jokさん今回はいろいろありがとうございました。
また、わからないことがありましたらご教授願います。
解決済み
ツイート | ![]() |