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-typ-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 に答える