2012-02-13 131 views
0

在我开发的eclipse插件中,我需要从插件中执行exe文件。 对于这一点,我使用的Java代码:从eclipse插件运行exe文件

p = Runtime.getRuntime().exec(command); 

哪里p是过程。这工作正常。

但是,当部署插件(已经在我的开发环境中使用“运行eclipse应用程序”时),插件正在eclipse所在的文件夹中查找exe文件(靠近eclipse.exe文件)。我不想把我的exe放在那里。

我希望eclipse将它放入插件jar(或者其他可以找到这样的资源文件的文件夹中),并且exec命令会在那里找到它。小增加:为了运行,我的exe文件需要一个dll,我把它放在与exe相同的目录中。所以当它从插件运行时,exe需要能够找到这个dll。

我该怎么做?

回答

2

您必须在exec命令中指定exe文件的完整路径。为了让您的包内的exe的完整路径,使用

URL url = FileLocator.resolve(FileLocator.find(Platform.getBundle("my.bundle.id"), new Path("path/within/my/bundle.exe"), Collections.EMPTY_MAP)); 

这当然只是如果你的包是不是部署为JAR文件的工作,但作为文件夹。如果你想将你的bundle部署为jar文件,你必须在执行之前解压exe文件。

+0

非常感谢汤姆。两个后续问题:(1)我怎么知道什么是“my.bundle.id”? (2)我的功能是由几个插件项目组成的。我可以将其中一些作为罐子和其他作为文件夹进行部署吗?如果我把exe和dll放在一个单独的插件项目中,并且只部署这个插件作为文件夹,也许最好? – user990371 2012-02-13 15:12:59

+0

1:看看你的'META-INF/MANIFEST.MF',捆绑ID是'Bundle-SymbolicName'。 – 2012-02-13 15:15:51

+0

2:是的。要将bundle部署为文件夹,必须在bundle-class路径中添加jar文件,例如'Bundle-ClassPath:myplugin.jar'和你的'build.properites'应该看起来像这样:012. bin.includes = META-INF/,\ myplugin.jar,\ about.html,\ OSGI-INF/ source.myplugin.jar = SRC/ src.includes = about.html ' – 2012-02-13 15:23:11