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

本文关键字:文件 Java jar 自变量 参数 文件夹 | 更新日期: 2023-09-27 18:27:51

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

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:'" with "'Users'Dan'script1.lua

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

{"指定的可执行文件不是此操作系统平台的有效应用程序。"}

这很奇怪,我不确定我是否理解这个问题。我在Windows10上使用unluac.jar,我已经用了很多次来反编译脚本。

我不确定到底出了什么问题,因为我作为一名程序员相当缺乏经验。但如果这个错误被修复了,剩下的可能就写不正确了,我有点不知道该怎么做。


我很想找到一种修复当前代码的方法或更好的方法。我试图让这篇文章变得简单,但如果我错过了任何重要信息,请告诉我。我非常乐意添加任何需要的内容。我相信我犯过错误,但有机会纠正错误并从中吸取教训将是非常好的。

谢谢大家。我很感激你的帮助!



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


编辑2:在将StartInfo.FileName更改为"java"而不是"unluac.jar"后,我不再收到任何关于操作系统的错误。java程序弹出一秒钟,然后我得到另一个异常:

{"拒绝访问路径"C:''Users''Dan''Desktop''22222''Descompiled''WildStar''pov''BinCommon''Scripts''Experimental"。"}

我的程序以前曾通过File.WriteAllBytes和File.WriteAll Text写入文件,始终写入桌面上的同一文件夹。我添加了一个程序集清单,并赋予程序提升的权限,但它仍然给出了相同的异常。


编辑3:我通过为目录提供fileName来解决以前的问题。目前,java程序正在运行,我的程序正在遍历发送它所需的所有文件,但由于某种原因,所有文件的输出都是空的。它们有写入名称,并且在正确的文件夹中,但都是0kb。

我怀疑这可能与程序试图读取.jar文件的输出有关,这让我认为我的文件如何输入或如何获取输出仍然有问题。

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

我的代码出现了一系列问题,我在解决这些问题时进行了更新。这是我正确使用的最后一段代码。

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();

主要的问题是我参加这个项目的内容。该程序采用-jarunluac.exe,这就是现在更新的功能。如上所述,我的问题被其他错误所加剧,最后一个问题是我的导出格式出现了一个小错误。

所以这最后的代码是有效的,我的错误得到了解决。希望这也许能帮助那些想做类似事情的人。

此外,之前有一个人评论并帮助了我,但删除了他们的帖子,因为我已经解决了这个特定的问题。无论如何,非常感谢他!我真的很感谢你的帮助!

感谢那些编辑我问题的人,它帮助我学会了在未来发布更好的帖子。