8229795: Investigate registry key usage and need for --win-registry-name option.
Reviewed-by: kcr, asemenyuk, almatvee
--- 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),
--- 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);
--- 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 <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 <id string>\n\
--- 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 <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 <id string>\n\
--- 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 <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 <id string>\n\
--- 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<Map<String, ? super Object>> fileAssociations =
FILE_ASSOCIATIONS.fetchFrom(params);
- String regName = APP_REGISTRY_NAME.fetchFrom(params);
Set<String> defaultedMimes = new TreeSet<>();
- int count = 0;
for (Map<String, ? super Object> fa : fileAssociations) {
String description = FA_DESCRIPTION.fetchFrom(fa);
List<String> 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 + " <ProgId Id='" + entryName
+ "' Description='" + description + "'");
if (icon != null && icon.exists()) {
@@ -840,11 +835,8 @@
out.println(" />");
} else {
for (String ext : extensions) {
- String entryName = regName + "File";
- if (count > 0) {
- entryName += "." + count;
- }
- count++;
+
+ entryName = ext.toUpperCase() + "File";
out.print(prefix + " <ProgId Id='" + entryName
+ "' Description='" + description + "'");
@@ -855,29 +847,24 @@
}
out.println(">");
- if (extensions == null) {
- Log.verbose(I18N.getString(
- "message.creating-association-with-null-extension"));
+ out.print(prefix + " <Extension Id='"
+ + ext + "' Advertise='no'");
+ if (mime == null) {
+ out.println(">");
} else {
- out.print(prefix + " <Extension Id='"
- + ext + "' Advertise='no'");
- if (mime == null) {
- out.println(">");
- } else {
- out.println(" ContentType='" + mime + "'>");
- if (!defaultedMimes.contains(mime)) {
- out.println(prefix
- + " <MIME ContentType='"
- + mime + "' Default='yes' />");
- defaultedMimes.add(mime);
- }
+ out.println(" ContentType='" + mime + "'>");
+ if (!defaultedMimes.contains(mime)) {
+ out.println(prefix
+ + " <MIME ContentType='"
+ + mime + "' Default='yes' />");
+ defaultedMimes.add(mime);
}
- out.println(prefix
- + " <Verb Id='open' Command='Open' "
- + "TargetFile='" + LAUNCHER_ID
- + "' Argument='\"%1\"' />");
- out.println(prefix + " </Extension>");
}
+ out.println(prefix
+ + " <Verb Id='open' Command='Open' "
+ + "TargetFile='" + LAUNCHER_ID
+ + "' Argument='\"%1\"' />");
+ out.println(prefix + " </Extension>");
out.println(prefix + " </ProgId>");
}
}
--- 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<String> APP_REGISTRY_NAME =
new StandardBundlerParam<> (
- Arguments.CLIOptions.WIN_REGISTRY_NAME.getId(),
+ "win.registryName",
String.class,
params -> {
String nm = APP_NAME.fetchFrom(params);
--- 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");
}
}
--- 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");
}
}
--- 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");
}
}
--- 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<String> 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();
- }
- }
-}
--- 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);
- }
- }
-}
--- 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);
- }
- }
-}