使用java代码调用exe程序 (包括参数传递)

使用Java代码调用exe

1使用场景

我现在使用eclipse+tomcat的架构建立了web server, 在这个web project中我需要建立一个定时任务,在定时任务中执行本地的一个C#工程生成的exe。

2Java代码

public class MyTask extends TimerTask {

  public void run() {
     System.out.println("call at " + (new Date()));
    // TODO æ­¤å¤?æ·»å? å…·ä½“ä»»å?¡ä»£ç 
     try {
         String cmdStr1="D:/download/SvmGridParameterTraining/SvmGridParameterTraining/EasySvmTrain/bin/Debug/EasySvmTrain newtrain.txt newtest.txt";

         Runtime.getRuntime().exec("cmd.exe /c start "+cmdStr1);
     }catch(Exception e){
         e.printStackTrace();
     }
  }

}

getRuntime().exec()中的参数包括exe文件全路径和参数 (我后面的两个txt参数直接写在后面即可)

/c 的意思是执行之后关闭命令行。

3陷阱:exe工作路径

按以上代码执行后,发现程序并没有按预期执行。 经过测试发现 作为参数的newtrain.txt 和newtest.txt 为空。 所以我分析在程序的执行路径下并没有这两个文件

在调用的C#程序中加入如下代码:

Headache 2014/8/29 13:28:11
 Console.WriteLine("Environment.CurrentDirectory:" + Environment.CurrentDirectory);
 Console.WriteLine("Directory.GetCurrentDirectory():" + Directory.GetCurrentDirectory());
 String input2 = Console.ReadLine();

打印出项目的工作目录,可以发现。在单独调用C#工程时,工作目录为C#的工程目录,而使用tomcat +eclipse 做定时任务时, 打印出的目录是tomcat的目录。

因为源程序需要使用的newtrain和newtest文件都在C#目录下, 所以通过java调用时传进去的newtrain 和 newtest这两个参数实际上是没什么意义的(tomcat下并没有这两个文件)

4解决方式

根据打印出的当前工作目录, 把参数文件放到相应的目录下。

时间: 2024-10-11 06:24:47

使用java代码调用exe程序 (包括参数传递)的相关文章

java代码调用exe(cmd命令)

public class ShellCommand{    public static void execCmd(String cmd, boolean wait)    {        execCmd(cmd, wait, null);    } public static void execCmd(String cmd, boolean wait, StringBuilder output)    {        String[] cmds = new String[] { cmd };

ubuntu下用java代码调用命令将java格式文件转换为html格式文件

首先我们应该在电脑上装上GNU Source-highlight 3.1.7,给个链接参考: http://www.gnu.org/software/src-highlite/#mozTocId120994 下面代码实现了 将java类型的代码转换为html文件类型的代码,如果java代码的文件名为 helloword.java,则转换为html格式的文件名为helloword.java.html,将java代码在浏览器上显示出来.其次我还将html文件中的内容提取出来,便于在html文件里编写

Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import

[转]自定义URL Protocol Handler,从网页调用EXE程序

转自:http://www.cnblogs.com/zjneter/archive/2008/01/08/1030066.html 迅雷,电驴等软件可以在浏览器中点击一个url后自动启动,并执行操作.这是咋实现的呢? 要实现这个功能笼共分3步.(我们注册一个xishui:// 这样的 protocol-handler,实现在网页中点击xishui://hello,就弹出一个对话框,上面显示"hello")1 按照如下结构建立注册表  其中 [xishui] 是建立在注册表的 [HKEY

java代码调用数据库存储过程

由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet; import oracle.jdbc.OracleCalla

python3调用exe程序编写cve20190708批量检测工具

1.python3调用exe程序编写cve20190708批量检测工具 工具下载地址: https://www.qianxin.com/other/CVE-2019-0708 由于这个exe程序只是单IP扫描版本,于是使用python3修改为批量扫描脚本版本 #!/usr/bin/python3 #-*- coding:utf-8 -*- #编写环境 windows 7 x64 Notepad++ + Python3.5.0 import os import sys def main(): #需

java调c# exe 程序,exe里写文件问题

应用场景描述: java web程序,触发 调用c#写的后台exe程序,发现exe里写的文件找不到.单独在cmd命令行下执行exe没问题: 问题查找: 由于exe里获取文件路径错误导致: 解决方法: exe中获取程序路径改为: string pathLog = System.Reflection.Assembly.GetExecutingAssembly().Location; pathLog = pathLog.Substring(0, pathLog.LastIndexOf(@"\"

C#调用Exe程序示例

在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 using System.Diagnostics; Process p = Process.Start("notepad.exe"); p.WaitForExit();//关键,等待外部程序退出后才能往下执行 通过上述代码可以调用记事本程序,注意如果不是调用系统程序,则需要输入全路径. 示

.net调用.exe程序

1. 较为简单的.exe程序可采用进程调用 Process.Start("D:\\emr\\emras.exe", para); 解析:参数1为.exe的存放路径,参数2为.exe的执行参数 2. 如果.exe程序中还有其他调用,则上述方法可能在运行过程中报错. 这种情况下,可采用直接调用cmd的执行方式 [DllImport("kernel32.dll")]public static extern int WinExec(string exeName, int o