【发布时间】:2014-02-24 23:56:32
【问题描述】:
我有一个小程序并从小程序在 Windows 上启动一些进程。 当我从另一个代码(测试)开始这个过程时,这个代码工作正常,过程从 rt.exec() 运行到 proc.destroy()。 当我使用 html 调用 applet - 进程每次只运行 5 秒(!!!)然后只是活着,但不起作用,到 proc.destroy()。 这对我来说真的很有趣(小程序中的新手)。我认为,这个问题是由 AccessController 引起的。请帮我解决这个问题(正常运行过程超过 5 秒)!提前致谢。
附:我使用 Windows,中等 Java 安全杠杆,小程序是自签名的。它要求我“允许”,小程序有效。
代码如下:
public String startRecording(final String filename) throws IOException {
try {
return (String) AccessController
.doPrivileged(new PrivilegedAction<String>() {
public String run() {
try {
proc = Runtime
.getRuntime()
.exec(cmd + filename + "." + config.getFormat());
//proc.waitFor();
return "Ffmpeg process started";
} catch (Exception e) {
// TODO Auto-generated catch block
return e.getMessage();
}
}
});
} catch (Exception e) {
return e.getMessage();
}
}
在这里停止方法
public void stopRecording() {
proc.destroy();
}
编辑 1: 是FFMPEG进程,记录桌面视频并写入文件,可能AccessController会阻止对文件系统的访问。
【问题讨论】:
-
鉴于
filename可能是恶意的,这看起来不太安全。 / LiveConnect 和小程序活动完成后五秒钟是否停止?听起来像是清理失控进程的插件。所以保持小程序运行(并确定文件名)。 -
我了解文件名。我真的不知道小程序是否正在运行,如何检查它?进程处于活动状态,但不起作用。
-
如果我通过 Windows 命令提示符启动进程,我的进程将保持活跃并运行。这太疯狂了,帮帮我!
-
阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用
exec并使用ProcessBuilder构建Process。还要将String arg分解为String[] args以说明本身包含空格的参数。
标签: java security applet access-control