2 votos

La ejecución de empaquetados de comandos de shell en un endurecido aplicación en tiempo de ejecución

He escrito una aplicación Java que quiero distribuir en forma de un macOS paquete de la aplicación. La aplicación necesita para ejecutar una aplicación de línea de comandos que también es parte del paquete. El paquete está firmada correctamente (comprobado mediante el firmado de código de comando) y el templado de tiempo de ejecución está habilitado.

Soy capaz de ejecutar la aplicación, pero, a continuación, la aplicación no se puede ejecutar el paquete de aplicaciones de línea de comandos.

El código utilizado para ejecutar la aplicación de línea de comandos:

Runtime.getRuntime().exec("/path/to/app/bundle/Contents/cli/myCommandLineApplication");

El código funciona bien cuando se firmo el paquete sin la habilitación de la endurecido en tiempo de ejecución. Después de habilitar la endurecido en tiempo de ejecución, tengo la siguiente excepción:

No se puede ejecutar el programa "myCommandLineApplication": error=0, posix_spawn error

¿Qué estoy haciendo mal? Es incluso posible generar procesos de niños desde dentro de un endurecido aplicación en tiempo de ejecución?

El tiempo de ejecución de Java que estoy usando es AdoptOpenJDK (construir 11.0.4+11). La aplicación no es de espacio aislado. Los derechos a los que he usado cuando se firma el paquete se

<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.automation.apple-events</key>
<true/>

2voto

ritwik sinha Puntos 126

El problema estaba relacionado con mi proceso de construcción en sí, no la endurecido en tiempo de ejecución que yo sospechaba. De hecho, cuando se permitió a la endurecido en tiempo de ejecución, también un lanzador de la aplicación se puso en marcha en el interior del paquete que se inicia el principal de la aplicación usando el paquete JRE.

Como este es el AdoptOpenJDK he mencionado, se utiliza spawn de tiempo de ejecución.exec que provocó el problema. Una vez que he añadido System.setProperty( "jdk.lang.Process.launchMechanism", "FORK"); a mi principal método, el tiempo de ejecución.exec estaba funcionando bien de nuevo más tarde, incluso con la endurecido habilitada para tiempo de ejecución.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X