将文件从文件夹发送到 Java .jar 文件作为 parameter/argument?
Send file from folder to Java .jar file as parameter/argument?
我正在编写一个 C# 程序来提取几个已编译的 Lua 脚本。基本上我想做的是创建一个 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:\" with "\Users\Dan\script1.lua
当我提取时,它调用这个函数。我没有看到 java 程序在任何时候打开,当它到达 StandardOutput 时它给我一个异常。
{"The specified executable is not a valid application for this OS platform."}
这很奇怪,我不确定我是否理解这个问题。我在 Windows 10 使用 unluac.jar,我已经多次使用它来反编译脚本。
我不确定到底出了什么问题,因为我作为一名程序员相当缺乏经验。但是如果修复了这个错误,剩下的部分可能写不正确,我有点不知道如何做到这一点。
我想要一种修复当前代码的方法或一种更好的方法。我试图使这个 post 简单,但如果我遗漏了任何重要信息,请告诉我。我会非常乐意添加任何需要的东西。我确信我犯过错误,但如果有机会改正错误并从中吸取教训,那就太好了。
非常感谢大家。感谢您的帮助!
编辑: 我解决了一些问题,但仍然有错误。最初程序找不到 unluac.jar 因为我没有给它工作目录。我还需要重定向标准输出,然后将 useexecutable shell 设置为 false,但我仍然有一个关于 OS 不正确的新错误。谢谢!
编辑 2: 在将 StartInfo.FileName 改为 "java" 而不是 "unluac.jar" 后,我不再收到关于 OS 的任何错误。
在我收到另一个异常之前,java 程序弹出一秒钟:
{"Access to the path 'C:\Users\Dan\Desktop222\Decompiled\WildStar\pov\BinCommon\Scripts\Experimental' is denied."}
我的程序之前通过 File.WriteAllBytes 和 File.WriteAllText 写入文件,总是写入我桌面上的同一个文件夹。我已经添加了一个程序集清单并赋予程序提升的权限,但它仍然给出相同的异常。
编辑 3: 我通过为目录提供文件名解决了之前的问题。目前,java 程序是 运行,我的程序正在遍历我需要发送的所有文件,但由于某种原因,所有文件的输出都是空的。它们具有写入名称并且位于正确的文件夹中,但都是 0kb。
我怀疑这可能与试图读取 .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();
主要问题是我在程序中输入了什么。该程序采用 -jar unluac.exe ,这是现在更新的内容。
我的问题因上面记录的其他错误而变得更加复杂,最后一个问题是我的导出格式存在一个小错误。
所以这个最终代码有效,我的错误得到解决。希望这可能会对希望做类似事情的人有所帮助。
此外,之前有人评论并帮助过我,但删除了他们的post,因为我已经解决了那个特定的问题。无论如何,非常感谢他!非常感谢您的帮助!
感谢那些编辑我的问题的人,它帮助我学会在未来做得更好 post。
我正在编写一个 C# 程序来提取几个已编译的 Lua 脚本。基本上我想做的是创建一个 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:\" with "\Users\Dan\script1.lua
当我提取时,它调用这个函数。我没有看到 java 程序在任何时候打开,当它到达 StandardOutput 时它给我一个异常。
{"The specified executable is not a valid application for this OS platform."}
这很奇怪,我不确定我是否理解这个问题。我在 Windows 10 使用 unluac.jar,我已经多次使用它来反编译脚本。
我不确定到底出了什么问题,因为我作为一名程序员相当缺乏经验。但是如果修复了这个错误,剩下的部分可能写不正确,我有点不知道如何做到这一点。
我想要一种修复当前代码的方法或一种更好的方法。我试图使这个 post 简单,但如果我遗漏了任何重要信息,请告诉我。我会非常乐意添加任何需要的东西。我确信我犯过错误,但如果有机会改正错误并从中吸取教训,那就太好了。
非常感谢大家。感谢您的帮助!
编辑: 我解决了一些问题,但仍然有错误。最初程序找不到 unluac.jar 因为我没有给它工作目录。我还需要重定向标准输出,然后将 useexecutable shell 设置为 false,但我仍然有一个关于 OS 不正确的新错误。谢谢!
编辑 2: 在将 StartInfo.FileName 改为 "java" 而不是 "unluac.jar" 后,我不再收到关于 OS 的任何错误。
在我收到另一个异常之前,java 程序弹出一秒钟:
{"Access to the path 'C:\Users\Dan\Desktop222\Decompiled\WildStar\pov\BinCommon\Scripts\Experimental' is denied."}
我的程序之前通过 File.WriteAllBytes 和 File.WriteAllText 写入文件,总是写入我桌面上的同一个文件夹。我已经添加了一个程序集清单并赋予程序提升的权限,但它仍然给出相同的异常。
编辑 3: 我通过为目录提供文件名解决了之前的问题。目前,java 程序是 运行,我的程序正在遍历我需要发送的所有文件,但由于某种原因,所有文件的输出都是空的。它们具有写入名称并且位于正确的文件夹中,但都是 0kb。
我怀疑这可能与试图读取 .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();
主要问题是我在程序中输入了什么。该程序采用 -jar unluac.exe ,这是现在更新的内容。 我的问题因上面记录的其他错误而变得更加复杂,最后一个问题是我的导出格式存在一个小错误。
所以这个最终代码有效,我的错误得到解决。希望这可能会对希望做类似事情的人有所帮助。
此外,之前有人评论并帮助过我,但删除了他们的post,因为我已经解决了那个特定的问题。无论如何,非常感谢他!非常感谢您的帮助!
感谢那些编辑我的问题的人,它帮助我学会在未来做得更好 post。