将文件夹中的文件发送到Java .jar文件中作为参数/参数?

我正在编写一个C#程序,该程序会提取多个已编译的Lua脚本。基本上,我想要做的是创建一个将所有提取出的文件发送到decompiler(通过提供文件的路径和名称)的lua.jar反编译器的进程。

Java .jar文件unluac.jar位于与我的C#可执行文件相同的文件夹中。

Process doctorProc = new Process();
doctorProc.StartInfo = new ProcessStartInfo("unluac.jar", "-jar unluac.jar" + Path.Combine(selectedDirectory, newFileDirectory));
doctorProc.StartInfo.FileName = "unluac.jar";
doctorProc.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
doctorProc.StartInfo.RedirectStandardOutput = true;
doctorProc.StartInfo.UseShellExecute = false;
doctorProc.Start();
String luaScript = doctorProc.StandardOutput.ReadToEnd();
File.WriteAllText(Path.Combine(finalOutputDirectory,fileName), luaScript);
doctorProc.WaitForExit();

这就是我拥有的。它正在提供的路径比较模糊,基本上是将 C:\""\Users\Dan\script1.lua 组合在一起。

当我执行提取操作时,它会调用这个函数。我并没有看到Java程序在任何时候打开,当它到达StandardOutput时,它给我一个异常。

{"The specified executable is not a valid application for this OS platform."}

这很奇怪,我不确定自己是否理解了问题。我在Windows 10上使用unluac.jar(我已经使用过多次来反编译脚本)。

我不确定到底发生了什么,因为我作为一个程序员还没有很多经验。但是,如果可以解决此错误,则可能未正确编写该余下的代码,我有些不知所措。

我希望有一种方法可以修复这个当前的代码或更好的方法来处理它。我尝试使此帖子简单化,但如果我错过了任何重要信息,请告诉我。我将非常愿意添加任何所需的内容。我有信心自己犯了错误,但是有机会修复它并从中学习将是非常好的。

非常感谢大家的帮助!

编辑: 我解决了一些问题,但仍然有错误。最初,程序无法找到unluac.jar,因为我未能为它提供工作目录。我还需要重定向标准输出,然后将useexecutable shell设置为false,但我仍然有关于错误操作系统的新错误。谢谢!

编辑2: 更改StartInfo.FileName为“java”而不是“unluac.jar”后,我不再收到有关操作系统的任何错误。Java程序在一秒钟内弹出,然后我再次收到异常:

{"Access to the path 'C:\Users\Dan\Desktop\22222\Decompiled\WildStar\pov\BinCommon\Scripts\Experimental' is denied."}

我的程序以前通过File.WriteAllBytes和File.WriteAllText写入过文件,总是写入同一个文件夹中的文件。我已添加程序集清单并给了程序提升的特权,但它仍然给出相同的异常。

编辑3: 通过同时提供目录和文件名来解决了前面的问题。目前,Java程序正在运行,我的程序正在迭代我需要发送给它的所有文件,但出于某种原因,所有文件的输出都为空。它们具有正确的名称并位于正确的文件夹中,但其大小均为0kb。

我怀疑这可能与程序尝试读取.jar文件的输出有关,这使我认为我的文件输入方式或如何捕获输出仍然存在问题。

点赞
用户5329378
用户5329378

我遇到了一系列代码问题,我在解决问题的同时进行了更新。以下是现在运行正确的最终代码。

doctorProc.StartInfo.FileName = "java";
doctorProc.StartInfo.Arguments = "-jar unluac.jar " + fileDirectory;
File.Open((selectedDirectory + newFileDirectory), FileMode.Open, FileAccess.ReadWrite)));
doctorProc.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
doctorProc.StartInfo.RedirectStandardOutput = true;
doctorProc.StartInfo.UseShellExecute = false;
doctorProc.Start();
String luaScript = doctorProc.StandardOutput.ReadToEnd();
File.WriteAllText(Path.Combine(finalOutputDirectory,fileName), luaScript);
doctorProc.WaitForExit();

主要问题在于我输入到程序中的数据。程序需要 -jar unluac.exe,我现在已经更新了它。 我的问题受到其他错误的影响,正如上面记录的那样,最终问题是我的导出格式出现了小错误。

所以这个最终代码可以正常运行,我的错误已经解决。希望这可能有助于一些希望做类似事情的人。

之前有一个评论者给了我帮助,但由于我已经解决了那个特定问题,他删除了自己的帖子。无论如何,非常感谢他!我真的很感激您的帮助!

还要感谢那些编辑我的问题的人,这有助于我学习如何发布更好的帖子。

2015-12-23 08:22:20