# HG changeset patch # User herrick # Date 1566250480 14400 # Node ID 91f8eec580864047619bb6c3c7ca3ca42b18713b # Parent 1ea53164610055192c51839505bd4fbfbaa03655 8229795: Investigate registry key usage and need for --win-registry-name option. Reviewed-by: kcr, asemenyuk, almatvee diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java Mon Aug 19 17:34:40 2019 -0400 @@ -310,8 +310,6 @@ setOptionValue("win-dir-chooser", true); }), - WIN_REGISTRY_NAME ("win-registry-name", OptionCategories.PLATFORM_WIN), - WIN_UPGRADE_UUID ("win-upgrade-uuid", OptionCategories.PLATFORM_WIN), diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java Mon Aug 19 17:34:40 2019 -0400 @@ -100,7 +100,6 @@ options.put(CLIOptions.WIN_MENU_GROUP.getId(), USE.INSTALL); options.put(CLIOptions.WIN_SHORTCUT_HINT.getId(), USE.INSTALL); options.put(CLIOptions.WIN_DIR_CHOOSER.getId(), USE.INSTALL); - options.put(CLIOptions.WIN_REGISTRY_NAME.getId(), USE.INSTALL); options.put(CLIOptions.WIN_UPGRADE_UUID.getId(), USE.INSTALL); options.put(CLIOptions.WIN_PER_USER_INSTALLATION.getId(), USE.INSTALL); diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties Mon Aug 19 17:34:40 2019 -0400 @@ -207,10 +207,6 @@ \ Start Menu group this application is placed in\n\ \ --win-per-user-install\n\ \ Request to perform an install on a per-user basis\n\ -\ --win-registry-name \n\ -\ Name of the application for registry references.\n\ -\ The default is the Application Name with only\n\ -\ alphanumerics, dots, and dashes (no whitespace)\n\ \ --win-shortcut\n\ \ Creates a desktop shortcut for the application\n\ \ --win-upgrade-uuid \n\ diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties Mon Aug 19 17:34:40 2019 -0400 @@ -207,10 +207,6 @@ \ Start Menu group this application is placed in\n\ \ --win-per-user-install\n\ \ Request to perform an install on a per-user basis\n\ -\ --win-registry-name \n\ -\ Name of the application for registry references.\n\ -\ The default is the Application Name with only\n\ -\ alphanumerics, dots, and dashes (no whitespace)\n\ \ --win-shortcut\n\ \ Creates a desktop shortcut for the application\n\ \ --win-upgrade-uuid \n\ diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties --- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties Mon Aug 19 17:34:40 2019 -0400 @@ -207,10 +207,6 @@ \ Start Menu group this application is placed in\n\ \ --win-per-user-install\n\ \ Request to perform an install on a per-user basis\n\ -\ --win-registry-name \n\ -\ Name of the application for registry references.\n\ -\ The default is the Application Name with only\n\ -\ alphanumerics, dots, and dashes (no whitespace)\n\ \ --win-shortcut\n\ \ Creates a desktop shortcut for the application\n\ \ --win-upgrade-uuid \n\ diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java Mon Aug 19 17:34:40 2019 -0400 @@ -810,9 +810,7 @@ if (launcherSet) { List> fileAssociations = FILE_ASSOCIATIONS.fetchFrom(params); - String regName = APP_REGISTRY_NAME.fetchFrom(params); Set defaultedMimes = new TreeSet<>(); - int count = 0; for (Map fa : fileAssociations) { String description = FA_DESCRIPTION.fetchFrom(fa); List extensions = FA_EXTENSIONS.fetchFrom(fa); @@ -822,15 +820,12 @@ String mime = (mimeTypes == null || mimeTypes.isEmpty()) ? null : mimeTypes.get(0); + String entryName = APP_REGISTRY_NAME.fetchFrom(params) + "File"; + if (extensions == null) { Log.verbose(I18N.getString( "message.creating-association-with-null-extension")); - String entryName = regName + "File"; - if (count > 0) { - entryName += "." + count; - } - count++; out.print(prefix + " "); } else { for (String ext : extensions) { - String entryName = regName + "File"; - if (count > 0) { - entryName += "." + count; - } - count++; + + entryName = ext.toUpperCase() + "File"; out.print(prefix + " "); - if (extensions == null) { - Log.verbose(I18N.getString( - "message.creating-association-with-null-extension")); + out.print(prefix + " "); } else { - out.print(prefix + " "); - } else { - out.println(" ContentType='" + mime + "'>"); - if (!defaultedMimes.contains(mime)) { - out.println(prefix - + " "); - defaultedMimes.add(mime); - } + out.println(" ContentType='" + mime + "'>"); + if (!defaultedMimes.contains(mime)) { + out.println(prefix + + " "); + defaultedMimes.add(mime); } - out.println(prefix - + " "); - out.println(prefix + " "); } + out.println(prefix + + " "); + out.println(prefix + " "); out.println(prefix + " "); } } diff -r 1ea531646100 -r 91f8eec58086 src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java Fri Aug 16 18:13:04 2019 -0400 +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java Mon Aug 19 17:34:40 2019 -0400 @@ -62,7 +62,7 @@ static final BundlerParamInfo APP_REGISTRY_NAME = new StandardBundlerParam<> ( - Arguments.CLIOptions.WIN_REGISTRY_NAME.getId(), + "win.registryName", String.class, params -> { String nm = APP_NAME.fetchFrom(params); diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java --- a/test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java Fri Aug 16 18:13:04 2019 -0400 +++ b/test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java Mon Aug 19 17:34:40 2019 -0400 @@ -115,7 +115,7 @@ try (PrintWriter out = new PrintWriter(new BufferedWriter( new FileWriter("fa.properties")))) { out.println("extension=" + TEST_EXT); - out.println("mime-type=application/" + TEST_EXT); + out.println("mime-type=application/x-jpackage-" + TEST_EXT); out.println("description=jpackage test extention"); } } diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java --- a/test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java Fri Aug 16 18:13:04 2019 -0400 +++ b/test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java Mon Aug 19 17:34:40 2019 -0400 @@ -113,7 +113,7 @@ try (PrintWriter out = new PrintWriter(new BufferedWriter( new FileWriter("fa.properties")))) { out.println("extension=" + TEST_EXT); - out.println("mime-type=application/" + TEST_EXT); + out.println("mime-type=application/x-jpackage-" + TEST_EXT); out.println("description=jpackage test extention"); } } diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java --- a/test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java Fri Aug 16 18:13:04 2019 -0400 +++ b/test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java Mon Aug 19 17:34:40 2019 -0400 @@ -131,7 +131,7 @@ try (PrintWriter out = new PrintWriter(new BufferedWriter( new FileWriter("fa.properties")))) { out.println("extension=" + TEST_EXT); - out.println("mime-type=application/" + TEST_EXT); + out.println("mime-type=application/x-jpackage-" + TEST_EXT); out.println("description=jpackage test extention"); } } diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/windows/base/WinRegistryNameBase.java --- a/test/jdk/tools/jpackage/windows/base/WinRegistryNameBase.java Fri Aug 16 18:13:04 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.awt.Desktop; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; - -public class WinRegistryNameBase { - - private static String TEST_NAME; - private static String EXT; - private static String TEST_EXT; - private static String WIN_REGISTRY_NAME; - private static String OUTPUT; - private static String[] CMD; - - private static void copyResults() throws Exception { - List files = new ArrayList<>(); - files.add(OUTPUT); - JPackageInstallerHelper.copyTestResults(files); - } - - private static void testCreateInstaller() throws Exception { - JPackageHelper.executeCLI(true, CMD); - JPackageInstallerHelper.validateOutput(OUTPUT); - copyResults(); - } - - private static void validateAppOutput() throws Exception { - File outFile = new File("appOutput.txt"); - int count = 10; - boolean bOutputCreated = false; - while (count > 0) { - if (!outFile.exists()) { - Thread.sleep(3000); - count--; - } else { - bOutputCreated = true; - break; - } - } - - if (!bOutputCreated) { - throw new AssertionError(outFile.getAbsolutePath() + " was not created"); - } - - String output = Files.readString(outFile.toPath()); - String[] result = output.split("\n"); - if (result.length != 3) { - System.err.println(output); - throw new AssertionError( - "Unexpected number of lines: " + result.length); - } - - if (!result[0].trim().equals("jpackage test application")) { - throw new AssertionError("Unexpected result[0]: " + result[0]); - } - - if (!result[1].trim().equals("args.length: 1")) { - throw new AssertionError("Unexpected result[1]: " + result[1]); - } - - File faFile = new File(TEST_NAME + "." + TEST_EXT); - if (!result[2].trim().equals(faFile.getAbsolutePath())) { - throw new AssertionError("Unexpected result[2]: " + result[2]); - } - } - - private static void verifyInstall() throws Exception { - createFileAssociationsTestFile(); - Desktop.getDesktop().open(new File(TEST_NAME + "." + TEST_EXT)); - validateAppOutput(); - - // Validate start menu - JPackageInstallerHelper.validateStartMenu("Unknown", TEST_NAME, true); - - // Validate registry - String[] values1 = {WIN_REGISTRY_NAME}; - JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\." + TEST_EXT, values1, true); - String[] values2 = {TEST_EXT}; - JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\MIME\\Database\\Content Type\\application/" + TEST_EXT, values2, true); - } - - private static void verifyUnInstall() throws Exception { - String folderPath = JPackagePath.getWinInstallFolder(TEST_NAME); - File folder = new File(folderPath); - if (folder.exists()) { - throw new AssertionError("Error: " + folder.getAbsolutePath() + " exist"); - } - - // Validate start menu - JPackageInstallerHelper.validateStartMenu("Unknown", TEST_NAME, false); - - // Validate registry - JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\." + TEST_EXT, null, false); - JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\MIME\\Database\\Content Type\\application/" + TEST_EXT, null, false); - } - - private static void createFileAssociationsTestFile() throws Exception { - try (PrintWriter out = new PrintWriter(new BufferedWriter( - new FileWriter(TEST_NAME + "." + TEST_EXT)))) { - out.println(TEST_NAME); - } - } - - private static void createFileAssociationsProperties() throws Exception { - try (PrintWriter out = new PrintWriter(new BufferedWriter( - new FileWriter("fa.properties")))) { - out.println("extension=" + TEST_EXT); - out.println("mime-type=application/" + TEST_EXT); - out.println("description=jpackage test extention"); - } - } - - private static void init(String name, String ext) { - TEST_NAME = name; - EXT = ext; - TEST_EXT = "jptest2"; - WIN_REGISTRY_NAME = "JPWINTESTREGISTRYNAME"; - OUTPUT = "output" + File.separator + TEST_NAME + "-1.0." + EXT; - CMD = new String[]{ - "--package-type", EXT, - "--input", "input", - "--output", "output", - "--name", TEST_NAME, - "--main-jar", "hello.jar", - "--main-class", "Hello", - "--file-associations", "fa.properties", - "--win-registry-name", WIN_REGISTRY_NAME}; - } - - public static void run(String name, String ext) throws Exception { - init(name, ext); - - if (JPackageInstallerHelper.isVerifyInstall()) { - verifyInstall(); - } else if (JPackageInstallerHelper.isVerifyUnInstall()) { - verifyUnInstall(); - } else { - JPackageHelper.createHelloInstallerJar(); - createFileAssociationsProperties(); - testCreateInstaller(); - } - } -} diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/windows/exe/WinRegistryNameTest.java --- a/test/jdk/tools/jpackage/windows/exe/WinRegistryNameTest.java Fri Aug 16 18:13:04 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * Test both --file-associations and --win-registry-name parameters. - * Output of the test should be WinRegistryNameTest-1.0.exe installer. - * The output installer should provide the same functionality as - * installer from FileAssociationsTest.java test with the following - * differences: - * - file association should work for files with with ".jptest2" suffix. - * - file association config should be saved in Windows Registry - * not under "JPWINTESTREGISTRYNAME" key. - */ - -/* - * @test - * @summary jpackage create installer test - * @library ../../helpers - * @library ../base - * @build JPackageHelper - * @build JPackagePath - * @build JPackageInstallerHelper - * @build WinRegistryNameBase - * @requires (os.family == "windows") - * @modules jdk.jpackage - * @modules jdk.jpackage/jdk.jpackage.internal - * @run main/othervm -Xmx512m WinRegistryNameTest - */ -public class WinRegistryNameTest { - private static final String TEST_NAME = "WinRegistryNameTest"; - private static final String EXT = "exe"; - - public static void main(String[] args) throws Exception { - if (jdk.jpackage.internal.WinMsiBundler.isSupported()) { - WinRegistryNameBase.run(TEST_NAME, EXT); - } - } -} diff -r 1ea531646100 -r 91f8eec58086 test/jdk/tools/jpackage/windows/msi/WinRegistryNameTest.java --- a/test/jdk/tools/jpackage/windows/msi/WinRegistryNameTest.java Fri Aug 16 18:13:04 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @summary jpackage create installer test - * @library ../../helpers - * @library ../base - * @build JPackageHelper - * @build JPackagePath - * @build JPackageInstallerHelper - * @build WinRegistryNameBase - * @requires (os.family == "windows") - * @modules jdk.jpackage - * @modules jdk.jpackage/jdk.jpackage.internal - * @run main/othervm -Xmx512m WinRegistryNameTest - */ -public class WinRegistryNameTest { - private static final String TEST_NAME = "WinRegistryNameTest"; - private static final String EXT = "msi"; - - public static void main(String[] args) throws Exception { - if (jdk.jpackage.internal.WinMsiBundler.isSupported()) { - WinRegistryNameBase.run(TEST_NAME, EXT); - } - } -}