从 C# 启动 .jar 文件 - 找不到 .properties 文件
Starting .jar file from C# - .properties file not found
我一直在用 C# 开发 Web 服务,我必须在其中将 Word docx 文件转换为 PDF。搜索了很长时间后,我选择了 docx4j,一个 java 库来进行转换。当我从命令行 运行 时,.jar 文件按预期工作,但是当我通过 System.Diagnostics.Process 从我的 C# 代码启动它时,我收到以下错误:
log4j:WARN No appenders could be found for logger (org.docx4j.jaxb.Context).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
...
WARN org.docx4j.utils.ResourceUtils .getResource line 84 - Couldn't get resource: docx4j.properties
WARN org.docx4j.Docx4jProperties .init line 22 - Couldn't find/read docx4j.properties; docx4j.properties not found via classloader.
进行调用的 C# 代码如下所示:
Process javaCall = new Process();
var dir = HttpContext.Current.Server.MapPath("~");
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = "-Xmx2048m -jar \"" + dir + "\App_Data\DocxToPDF.jar\" \"" + sourcePath + "\"";
startInfo.FileName = "\"" + System.Configuration.ConfigurationManager.AppSettings["JdkFilePath"] + "\"";
startInfo.UseShellExecute = false;
javaCall.StartInfo = startInfo;
javaCall.Start();
javaCall.WaitForExit();
我已经检查了 .jar 文件及其所在目录的 windows 安全设置,两者都设置为所有用户的完全权限。我不明白为什么手动命令行调用和 System.Diagnostics.Process.
会得到不同的结果
非常感谢您的帮助,如果您需要,我会提供更多信息。
好吧,结果证明这个答案比我预期的要容易。通过将 .properties 移动到与 .jar 文件相同的文件夹而不是将它们嵌套在程序中设法找到它们...
我想我下次应该先尝试简单的修复,谢谢你的时间。
您需要设置 java.exe 可执行文件的环境变量 Path 或指定 java.exe.
的完整路径
ProcessStartInfo ps = new ProcessStartInfo(@"c:\Program Files\java\jdk1.7.0\bin\java.exe",@"-jar C:\Users\Owner\Desktop\myJarFile.jar");
Process.Start(ps);
默认情况下,命令行知道 java 路径,但 ProcessStartInfo 不知道 java
在哪里
我一直在用 C# 开发 Web 服务,我必须在其中将 Word docx 文件转换为 PDF。搜索了很长时间后,我选择了 docx4j,一个 java 库来进行转换。当我从命令行 运行 时,.jar 文件按预期工作,但是当我通过 System.Diagnostics.Process 从我的 C# 代码启动它时,我收到以下错误:
log4j:WARN No appenders could be found for logger (org.docx4j.jaxb.Context).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
...
WARN org.docx4j.utils.ResourceUtils .getResource line 84 - Couldn't get resource: docx4j.properties
WARN org.docx4j.Docx4jProperties .init line 22 - Couldn't find/read docx4j.properties; docx4j.properties not found via classloader.
进行调用的 C# 代码如下所示:
Process javaCall = new Process();
var dir = HttpContext.Current.Server.MapPath("~");
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = "-Xmx2048m -jar \"" + dir + "\App_Data\DocxToPDF.jar\" \"" + sourcePath + "\"";
startInfo.FileName = "\"" + System.Configuration.ConfigurationManager.AppSettings["JdkFilePath"] + "\"";
startInfo.UseShellExecute = false;
javaCall.StartInfo = startInfo;
javaCall.Start();
javaCall.WaitForExit();
我已经检查了 .jar 文件及其所在目录的 windows 安全设置,两者都设置为所有用户的完全权限。我不明白为什么手动命令行调用和 System.Diagnostics.Process.
会得到不同的结果非常感谢您的帮助,如果您需要,我会提供更多信息。
好吧,结果证明这个答案比我预期的要容易。通过将 .properties 移动到与 .jar 文件相同的文件夹而不是将它们嵌套在程序中设法找到它们...
我想我下次应该先尝试简单的修复,谢谢你的时间。
您需要设置 java.exe 可执行文件的环境变量 Path 或指定 java.exe.
的完整路径ProcessStartInfo ps = new ProcessStartInfo(@"c:\Program Files\java\jdk1.7.0\bin\java.exe",@"-jar C:\Users\Owner\Desktop\myJarFile.jar"); Process.Start(ps);
默认情况下,命令行知道 java 路径,但 ProcessStartInfo 不知道 java
在哪里