On Wed, 14 Apr 2021 13:44:49 GMT, Alexander Scherbatiy <alex...@openjdk.org> wrote:
>> buildSrc/win.gradle line 474: >> >>> 472: boolean isExecutable(String file) { >>> 473: try { >>> 474: Runtime.runtime.exec(file) >> >> Is there a way other than to execute the command in question -- `rc` or >> `fxc` -- to see whether it will execute? I note that `fxc` will print a >> warning message when run with no arguments (but even with `gradle --info` it >> isn't printed to the console). > > There is File.canExecute() method but it looks like it only checks that the > java program is allowed to run a file rather the file is really executed. > > `Runtime.runtime.exec(file)` creates a ProcessBuilder and returns a Process > object. To get the program output it needs to read the process output and > error streams. > > Here is the program which I used to check File.canExecute() and > `Runtime.runtime.exec(file)` methods. > File.canExecute() returns true for both x64 and arm64 fxc.exe files. > `Runtime.runtime.exec(file)` passes for x64 fxc file and fails for arm64 one > on Windows x86_64: > > import java.io.File; > > public class CheckFile { > public static void main(String[] args) throws Exception { > > File file = new File(args[0]); > System.out.printf("input file : %s%n", file); > System.out.printf("file exists: %b%n", file.exists()); > System.out.printf("can execute: %b%n", file.canExecute()); > > Runtime.getRuntime().exec(file.getAbsolutePath()); > } > } > > > The output is: > > java CheckFile "c:/Program Files (x86)/Windows > Kits/10/bin/10.0.19041.0/x64/fxc.exe" > input file : c:\Program Files (x86)\Windows > Kits\10\bin\10.0.19041.0\x64\fxc.exe > file exists: true > can execute: true > > java CheckFile "c:/Program Files (x86)/Windows > Kits/10/bin/10.0.19041.0/arm64/fxc.exe" > input file : c:\Program Files (x86)\Windows > Kits\10\bin\10.0.19041.0\arm64\fxc.exe > file exists: true > can execute: true > Exception in thread "main" java.io.IOException: Cannot run program > "c:\Program": CreateProcess error=193, %1 is not a valid Win32 application That's pretty much what I suspected. Thanks for confirming. ------------- PR: https://git.openjdk.java.net/jfx/pull/439