запуск файла vbs из java
у меня есть тест файла VBS.vbs в C:/work/selenium/chrome/
и я хочу запустить его из моей Java-программы, поэтому я попробовал это, но не повезло:
public void test() throws InterruptedException {
Runtime rt = Runtime.getRuntime();
try {
Runtime.getRuntime().exec( "C:/work/selenium/chrome/test.vbs" );
}
catch( IOException e ) {
e.printStackTrace();
}
}
Если я попытаюсь запустить какой-то exe-файл с помощью этого метода, он работает хорошо, но когда я пытаюсь запустить файл VBS, он говорит "недопустимое приложение win32".
есть идеи, как запустить файл VBS с Java?
5 ответов
VBS-скрипт не является изначально исполняемым, как bat, cmd или exe-программа. Вы должны запустить интерпретатор (vbs.exe?) и передайте свой скрипт в качестве параметра:
String script = "C:\work\selenium\chrome\test.vbs";
// search for real path:
String executable = "C:\windows\...\vbs.exe";
String cmdArr [] = {executable, script};
Runtime.getRuntime ().exec (cmdArr);
public static void main(String[] args) {
try {
Runtime.getRuntime().exec( "wscript D:/Send_Mail_updated.vbs" );
}
catch( IOException e ) {
System.out.println(e);
System.exit(0);
}
}
это работает нормально, где Send_Mail_updated.vbs
- это имя моего файла VBS
try {
Runtime.getRuntime().exec(new String[] {
"wscript.exe", "C:\path\example.vbs"
});
} catch (Exception ex) {
ex.printStackTrace();
}
вы можете использовать приведенный выше код для запуска файла vbs.
полный код здесь
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class VBTest {
public static void main(String[] args) {
try {
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;
Process process = Runtime.getRuntime().exec( "cscript E:/Send_Mail_updated.vbs" );
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();
// "write" the parms into stdin
line = "param1" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "param2" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "param3" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
stdin.close();
// clean up if any output in stdout
BufferedReader brCleanUp = new BufferedReader (new InputStreamReader (stdout));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stdout] " + line);
}
brCleanUp.close();
// clean up if any output in stderr
brCleanUp =
new BufferedReader (new InputStreamReader (stderr));
while ((line = brCleanUp.readLine ()) != null) {
System.out.println ("[Stderr] " + line);
}
brCleanUp.close();
}
catch( IOException e ) {
System.out.println(e);
//System.exit(0);
}
}
}