2017-12-11 153 views
7

Tôi đang gọi một số EXE (7za.exe, pg_basebackup.exe, ...) từ JAVA ProcessBuilder. Nó hoạt động mà không có bất kỳ vấn đề nào trong 2 hoặc 3 ngày (EXE sẽ được gọi là hàng ngày). Sau đó EXE đang rơi liên tục.Lỗi EXE khi gọi từ ProcessBuilder trong java

7za.exe error:
Exit code :: -1.073.741.502

Windows Event log error:
Faulting application name: 7za.exe, version: 9.20.0.0, time stamp: 0x4ce553f5 Faulting module name: KERNELBASE.dll, version: 6.2.9200.21941, time stamp: 0x5792e533
Exception code: 0xc0000142
Fault offset: 0x000683ba
Faulting process id: 0x10bc
Faulting application start time: 0x01d2cebdff3bb05a
Faulting application path: EXEpath\bin\7za.exe
Faulting module path: KERNELBASE.dll
Report Id: 3d27046a-3ab1-11e7-93fe-00505680156e
Faulting package full name:
Faulting package-relative application ID:

Đoạn mã

File workingDir = new File(workingDirectory); 
ProcessBuilder pb = new ProcessBuilder(argumentsList); 
pb.redirectErrorStream(true); 
pb.directory(workingDir);   
Process process = pb.start(); 
BufferedReader commandOutput = new BufferedReader(new 
InputStreamReader(process.getInputStream())); 
String s = null; 
while ((s = commandOutput.readLine()) != null) { 
    print(s); 
} 
int exitCode = process.exitValue(); 

Ngoài ra nó không xảy ra trong tất cả các máy mà chạy mã này. Có bất kỳ rò rỉ bộ nhớ HOẶC mức độ lỗi hệ điều hành nào không? Xin cho biết.

Xin cảm ơn trước.

Chỉnh sửa 1: Cùng một loại lỗi trong C#. Nó cũng chứa sửa chữa.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/cb9a15ed-4401-47f1-8c78-0c63c3da677d/process-returns-0xc0000142-when-started-from-a-windows-service-prividing-the-credentials?forum=clr
Làm thế nào để đạt được nó trong java?

Chỉnh sửa 2: Java đang chạy như một dịch vụ (sử dụng wrapper)
phiên bản Java: 1.0.051
phiên bản Windows: Windows Server 2012 và R2 (64bit), Windows 7 (64bit), Windows 8 (64bit)

+0

Dường như đường dẫn của bạn hơi bị xáo trộn: 'EXEpath \ bin \ 7za.exe'? có thể bạn vô tình gõ một cái gì đó ở một nơi mà bạn không nên có :-) – Ivonet

+0

Hãy bỏ qua vị trí đó. Đó không phải là vị trí thực tế. –

+0

Liệu exes có hoạt động nếu bạn bắt đầu chúng theo cách thủ công không? (bằng cách nhấp đúp vào chúng) – Asoub

Trả lời

0

Vì vậy, tôi đồng ý với các ý kiến ​​ở trên hỏi chi tiết bổ sung để xác định nguyên nhân cơ bản của vấn đề này (số quá trình khi sự cố xảy ra, số liệu của cá thể, v.v.). Nói chung tôi sẽ cho rằng đó là một mô hình chống gọi để thực thi từ java nếu bạn có thể tránh nó. Trong trường hợp này, tôi sẽ khuyên bạn nên thử thay thế cuộc gọi đến tệp thực thi bằng một cái gì đó như số 7-zip binding.

Điều này sẽ cung cấp cho bạn thông tin chi tiết hơn về cách các quy trình cơ bản đang hoạt động và sẽ di chuyển quyền sở hữu và quản lý các quy trình trong JVM.

Các vấn đề liên quan