901 File f = new File( 902 CONFIG_ROOT.fetchFrom(params), MSI_PROJECT_CONTENT_FILE); 903 904 try (PrintStream out = new PrintStream(f)) { 905 906 // opening 907 out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); 908 out.println("<Include>"); 909 910 out.println(" <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">"); 911 if (MSI_SYSTEM_WIDE.fetchFrom(params)) { 912 // install to programfiles 913 out.println(" <Directory Id=\"ProgramFiles64Folder\" " 914 + "Name=\"PFiles\">"); 915 } else { 916 // install to user folder 917 out.println( 918 " <Directory Name=\"AppData\" Id=\"LocalAppDataFolder\">"); 919 } 920 921 // We should get valid folder or subfolders 922 String installDir = WINDOWS_INSTALL_DIR.fetchFrom(params); 923 String [] installDirs = installDir.split(Pattern.quote("\\")); 924 for (int i = 0; i < (installDirs.length - 1); i++) { 925 out.println(" <Directory Id=\"SUBDIR" + i + "\" Name=\"" 926 + installDirs[i] + "\">"); 927 } 928 929 out.println(" <Directory Id=\"APPLICATIONFOLDER\" Name=\"" 930 + installDirs[installDirs.length - 1] + "\">"); 931 932 // dynamic part 933 id = 0; 934 compId = 0; // reset counters 935 walkFileTree(params, WIN_APP_IMAGE.fetchFrom(params), out, " "); 936 937 // closing 938 for (int i = 0; i < installDirs.length; i++) { 939 out.println(" </Directory>"); 940 } 941 out.println(" </Directory>"); 942 943 // for shortcuts 944 if (SHORTCUT_HINT.fetchFrom(params)) { 945 out.println(" <Directory Id=\"DesktopFolder\" />"); 946 } 947 if (MENU_HINT.fetchFrom(params)) { 948 out.println(" <Directory Id=\"ProgramMenuFolder\">"); 949 out.println(" <Directory Id=\"ProgramMenuDir\" Name=\"" 950 + MENU_GROUP.fetchFrom(params) + "\">"); 951 out.println(" <Component Id=\"comp" + (compId++) + "\"" 952 + " Guid=\"" + UUID.randomUUID().toString() + "\"" 953 + " Win64=\"yes\"" 954 + ">"); | 901 File f = new File( 902 CONFIG_ROOT.fetchFrom(params), MSI_PROJECT_CONTENT_FILE); 903 904 try (PrintStream out = new PrintStream(f)) { 905 906 // opening 907 out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); 908 out.println("<Include>"); 909 910 out.println(" <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">"); 911 if (MSI_SYSTEM_WIDE.fetchFrom(params)) { 912 // install to programfiles 913 out.println(" <Directory Id=\"ProgramFiles64Folder\" " 914 + "Name=\"PFiles\">"); 915 } else { 916 // install to user folder 917 out.println( 918 " <Directory Name=\"AppData\" Id=\"LocalAppDataFolder\">"); 919 } 920 921 // reset counters 922 compId = 0; 923 id = 0; 924 925 // We should get valid folder or subfolders 926 String installDir = WINDOWS_INSTALL_DIR.fetchFrom(params); 927 String [] installDirs = installDir.split(Pattern.quote("\\")); 928 for (int i = 0; i < (installDirs.length - 1); i++) { 929 out.println(" <Directory Id=\"SUBDIR" + i + "\" Name=\"" 930 + installDirs[i] + "\">"); 931 if (!MSI_SYSTEM_WIDE.fetchFrom(params)) { 932 out.println(" <Component Id=\"comp" + (compId++) 933 + "\" DiskId=\"1\"" 934 + " Guid=\"" + UUID.randomUUID().toString() + "\"" 935 + " Win64=\"yes\"" 936 + ">"); 937 out.println("<CreateFolder/>"); 938 // has to be under HKCU to make WiX happy 939 out.println(" <RegistryKey Root=\"HKCU\" " 940 + " Key=\"Software\\" + VENDOR.fetchFrom(params) + "\\" 941 + APP_NAME.fetchFrom(params) + "\"" 942 + (CAN_USE_WIX36.fetchFrom(params) ? 943 ">" : " Action=\"createAndRemoveOnUninstall\">")); 944 out.println(" <RegistryValue Name=\"Version\" Value=\"" 945 + VERSION.fetchFrom(params) 946 + "\" Type=\"string\" KeyPath=\"yes\"/>"); 947 out.println(" </RegistryKey>"); 948 out.println(" <RemoveFolder Id=\"RemoveDir" 949 + (id++) + "\" Directory=\"SUBDIR" + i 950 + "\" On=\"uninstall\" />"); 951 out.println("</Component>"); 952 } 953 } 954 955 out.println(" <Directory Id=\"APPLICATIONFOLDER\" Name=\"" 956 + installDirs[installDirs.length - 1] + "\">"); 957 958 // dynamic part 959 walkFileTree(params, WIN_APP_IMAGE.fetchFrom(params), out, " "); 960 961 // closing 962 for (int i = 0; i < installDirs.length; i++) { 963 out.println(" </Directory>"); 964 } 965 out.println(" </Directory>"); 966 967 // for shortcuts 968 if (SHORTCUT_HINT.fetchFrom(params)) { 969 out.println(" <Directory Id=\"DesktopFolder\" />"); 970 } 971 if (MENU_HINT.fetchFrom(params)) { 972 out.println(" <Directory Id=\"ProgramMenuFolder\">"); 973 out.println(" <Directory Id=\"ProgramMenuDir\" Name=\"" 974 + MENU_GROUP.fetchFrom(params) + "\">"); 975 out.println(" <Component Id=\"comp" + (compId++) + "\"" 976 + " Guid=\"" + UUID.randomUUID().toString() + "\"" 977 + " Win64=\"yes\"" 978 + ">"); |