我正在编写一个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时它会给我一个例外。
{“指定的可执行文件不是此OS平台的有效应用程序。”}
这很奇怪,我不确定我是否理解这个问题。我使用unluac.jar在Windows 10上,我已经多次使用它来反编译脚本。
我不确定到底出了什么问题,因为我作为程序员相当缺乏经验。但如果这个错误得到修复,其余部分可能无法正确写入,我对如何做到这一点感到有点迷失。
我想要一种方法来修复当前的代码或更好的方法。我试图简化这个帖子,但如果我错过了任何重要信息,请告诉我。我非常乐意添加任何需要的东西。我有信心我犯了错误,但是有机会修复它们并从中吸取教训会非常好。
非常感谢大家。我很感激帮助!
编辑:我解决了一些问题,但仍然有错误。最初程序找不到unluac.jar,因为我没有给它工作目录。我还需要redirectstandardoutput然后将useexecutable shell设置为false,但是我仍然有一个关于错误操作系统的新错误。谢谢!
编辑2:在将StartInfo.FileName更改为“java”而不是“unluac.jar”后,我不再收到有关操作系统的任何错误。
在我得到另一个异常之前,java程序会弹出一秒钟:
{“拒绝访问路径'C:\ Users \ Dan \ Desktop \ 22222 \ Decompiled \ WildStar \ pov \ BinCommon \ Scripts \ Experimental'。”}
我的程序之前已经通过File.WriteAllBytes和File.WriteAllText写入了文件,始终是我桌面上的同一个文件夹。我添加了一个程序集清单,并为程序提升了权限,但它仍然提供相同的异常。
编辑3:我通过为目录提供fileName来修复上一个问题。目前,java程序正在运行,我的程序正在迭代我发送它所需的所有文件,但由于某种原因,所有文件的输出都是空的。它们具有写入名称并且位于正确的文件夹中,但都是0kb。
我怀疑这可能与尝试读取.jar文件输出的程序有关,这让我觉得我的文件输入方式或输出方式仍然存在问题。 / p>
答案 0 :(得分:0)
我的代码出现了一系列问题,我通过它们时进行了更新。 这是我能够正常运行的最终代码。
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,这是现在更新的内容。 上面记录的其他错误加剧了我的问题,最后一个问题是我的导出格式出现了一个小错误。
所以这个最终代码有效,我的错误得到了解决。希望这可能会帮助那些希望做类似事情的人。
此外,以前有人评论并帮助过我,但删除了他们的帖子,因为我已经解决了这个问题。无论如何,非常感谢他!我非常感谢你的帮助!
感谢那些编辑我的问题的人,这有助于我学会在将来做出更好的帖子。