0

我执行以下操作:

File tmpDir = com.google.common.io.Files.createTempDir();
tmpDir.deleteOnExit();

// determine command based upon OS
String prefix = "pk12util";
String command = String.format(
            "-i %s -d sql:%s -W '' -K ''", 
            cert.getAbsolutePath(), tmpDir.getAbsolutePath());

// run the command
CommandRunner.run(prefix, command);

CommandRunner 是 java ProcessBuilder 的包装器。它处理创建进程、返回命令输出和退出状态。

这是从 java 进程运行的命令和相应的输出。

pk12util -i a-typical-tls-cert.p12 -d sql:/tmpdirpath -W '' -K ''

pk12util:功能失败:安全库:数据库错误。

当我复制并粘贴从 java 进程运行的命令时,它成功完成。我验证了对 certdir 的权限。我什至尝试在 tmpDir 上运行 -N ,但没有产生任何分辨率。有人有什么建议吗?我试图通过 pk12util 的源代码挖掘错误,但找不到任何相关内容。

4

1 回答 1

0

我不确定是否有其他人会这样做,但我通过将我的 CommandRunner 从使用 ProcessBuilder 修改为使用 Runtime.getRuntime().exec(command) 解决了这个问题。我不明白为什么流程构建器与运行时#exec 相比失败了。

于 2012-12-05T21:21:47.057 回答