--- old/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsAppImageBuilder.java 2019-02-01 14:29:28.798535800 -0800 +++ new/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsAppImageBuilder.java 2019-02-01 14:29:27.560031400 -0800 @@ -27,7 +27,6 @@ import java.io.File; import java.io.FileOutputStream; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -50,12 +49,15 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Pattern; import java.util.stream.Stream; -import jdk.jpackage.internal.Arguments; import static jdk.jpackage.internal.StandardBundlerParam.*; public class WindowsAppImageBuilder extends AbstractAppImageBuilder { + static { + System.loadLibrary("jpackage"); + } + private static final ResourceBundle I18N = ResourceBundle.getBundle( "jdk.jpackage.internal.resources.WinResources"); @@ -388,40 +390,32 @@ // Update branding of EXE file if (REBRAND_EXECUTABLE.fetchFrom(p)) { - File tool = new File( - System.getProperty("java.home") + "\\bin\\jpackage.exe"); - - // Run tool on launcher file to change the icon and the metadata. try { - if (WindowsDefender.isThereAPotentialWindowsDefenderIssue()) { + String tempDirectory = WindowsDefender.getUserTempDirectory(); + if (Arguments.CLIOptions.context().userProvidedBuildRoot) { + tempDirectory = BUILD_ROOT.fetchFrom(p).getAbsolutePath(); + } + if (WindowsDefender.isThereAPotentialWindowsDefenderIssue( + tempDirectory)) { Log.error(MessageFormat.format(I18N.getString( "message.potential.windows.defender.issue"), - WindowsDefender.getUserTempDirectory())); + tempDirectory)); } launcher.setWritable(true); if (iconTarget.exists()) { - ProcessBuilder pb = new ProcessBuilder( - tool.getAbsolutePath(), - "--icon-swap", - iconTarget.getAbsolutePath(), + iconSwap(iconTarget.getAbsolutePath(), launcher.getAbsolutePath()); - IOUtils.exec(pb, false); } File executableProperties = getConfig_ExecutableProperties(p); if (executableProperties.exists()) { - ProcessBuilder pb = new ProcessBuilder( - tool.getAbsolutePath(), - "--version-swap", - executableProperties.getAbsolutePath(), + versionSwap(executableProperties.getAbsolutePath(), launcher.getAbsolutePath()); - IOUtils.exec(pb, false); } - } - finally { + } finally { executableFile.toFile().setReadOnly(); } } @@ -448,4 +442,8 @@ } } + private static native int iconSwap(String iconTarget, String launcher); + + private static native int versionSwap(String executableProperties, String launcher); + }