// research: https://www.youtube.com/watch?v=6Yf-eDsRrnM public static void Main(string[] args) { // pre UI //"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" .\output\output.xml //"C:\Program Files (x86)\WiX Toolset v3.11\bin\light" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" output.wixobj // Post UI //"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" .\output\output.xml //"C:\Program Files (x86)\WiX Toolset v3.11\bin\light" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll" -cultures:en-us output.wixobj string major_version = "18.02.22"; string minor_version = "3db277d"; string current_version = $"{major_version} v({minor_version})"; if (args.Length > 0) { for (var i = 1; i < args.Length; i++) { string arg = args [i]; int index = arg.IndexOf(':'); string val = arg.Substring(index + 1, arg.Length - (index + 1)).Trim(new char [] { '\"' }); if (arg.ToLower().StartsWith("wix_directory_path")) { wix_directory_path = val; } else if (arg.ToLower().StartsWith("build_directory_path")) { build_directory_path = val; } else if (arg.ToLower().StartsWith("input_directory_path")) { input_directory_path = val; } else if (arg.ToLower().StartsWith("output_directory_path")) { output_directory_path = val; } else if (arg.ToLower().StartsWith("mmria_server_binary_directory_path")) { mmria_server_binary_directory_path = val; } else if (arg.ToLower().StartsWith("mmria_console_binary_directory_path")) { mmria_console_binary_directory_path = val; } else if (arg.ToLower().StartsWith("mmria_server_html_directory_path")) { mmria_server_html_directory_path = val; } } } if (string.IsNullOrWhiteSpace(wix_directory_path)) { wix_directory_path = System.Configuration.ConfigurationManager.AppSettings["wix_directory_path"]; } if (string.IsNullOrWhiteSpace(build_directory_path)) { build_directory_path = System.Configuration.ConfigurationManager.AppSettings ["build_directory_path"]; } if (string.IsNullOrWhiteSpace(input_directory_path)) { input_directory_path = System.Configuration.ConfigurationManager.AppSettings["input_directory_path"]; } if (string.IsNullOrWhiteSpace(output_directory_path)) { output_directory_path = System.Configuration.ConfigurationManager.AppSettings["output_directory_path"]; } if (string.IsNullOrWhiteSpace(mmria_server_binary_directory_path)) { mmria_server_binary_directory_path = System.Configuration.ConfigurationManager.AppSettings ["mmria_server_binary_directory_path"]; } if (string.IsNullOrWhiteSpace(mmria_console_binary_directory_path)) { mmria_console_binary_directory_path = System.Configuration.ConfigurationManager.AppSettings ["mmria_console_binary_directory_path"]; } if (string.IsNullOrWhiteSpace(mmria_server_html_directory_path)) { mmria_server_html_directory_path = System.Configuration.ConfigurationManager.AppSettings ["mmria_server_html_directory_path"]; } if (System.IO.Directory.Exists(input_directory_path)) { System.IO.Directory.Delete(input_directory_path, true); } if (System.IO.Directory.Exists(output_directory_path)) { System.IO.Directory.Delete(output_directory_path, true); } if (System.IO.File.Exists(build_directory_path + @"\output.wixobj")) { System.IO.File.Delete(build_directory_path + @"\output.wixobj"); } if (System.IO.File.Exists(build_directory_path + @"\output.wixpdb")) { System.IO.File.Delete(build_directory_path + @"\output.wixpdb"); } if (System.IO.File.Exists(build_directory_path + @"\output.msi")) { System.IO.File.Delete(build_directory_path + @"\output.msi"); } CopyFolder.CopyDirectory(mmria_server_binary_directory_path, input_directory_path); CopyFolder.CopyDirectory(mmria_server_html_directory_path, input_directory_path + "/app"); CopyFolder.CopyDirectory(mmria_console_binary_directory_path + "/mapping-file-set", input_directory_path + "/mapping-file-set"); File.Copy(mmria_console_binary_directory_path + "/mmria.exe", input_directory_path + "/mmria.exe"); File.Copy(mmria_console_binary_directory_path + "/mmria.pdb", input_directory_path + "/mmria.pdb"); File.Copy(mmria_console_binary_directory_path + "/LumenWorks.Framework.IO.dll", input_directory_path + "/LumenWorks.Framework.IO.dll"); File.Copy("./mmria.exe.config", input_directory_path + "/mmria.exe.config", true); File.Copy("./mmria-server.exe.config", input_directory_path + "/mmria-server.exe.config", true); // version number -- Start System.Text.RegularExpressions.Regex version_tag = new System.Text.RegularExpressions.Regex("<\\%=version\\%>"); string profile_text = System.IO.File.ReadAllText(input_directory_path + "/app/scripts/profile.js"); System.IO.File.WriteAllText(input_directory_path + "/app/scripts/profile.js", version_tag.Replace(profile_text, current_version)); string index_text = System.IO.File.ReadAllText(input_directory_path + "/app/index.html"); System.IO.File.WriteAllText(input_directory_path + "/app/index.html", version_tag.Replace(index_text, current_version)); // version number -- End // remove unneeded files -- start if (System.IO.Directory.Exists(input_directory_path + "/app/metadata")) { System.IO.Directory.Delete(input_directory_path + "/app/metadata", true); } if (File.Exists(input_directory_path + "/app/grid-test-1.html")) { File.Delete(input_directory_path + "/app/grid-test-1.html"); } if (File.Exists(input_directory_path + "/app/grid-test-2.html")) { File.Delete(input_directory_path + "/app/grid-test-2.html"); } if (File.Exists(input_directory_path + "/app/grid-test-3.html")) { File.Delete(input_directory_path + "/app/grid-test-3.html"); } if (File.Exists(input_directory_path + "/app/socket-test.html")) { File.Delete(input_directory_path + "/app/socket-test.html"); } if (File.Exists(input_directory_path + "/app/socket-test2.html")) { File.Delete(input_directory_path + "/app/socket-test2.html"); } // remove uneeded files -- end // version number.... /* * * * * cp "${source_code_directory}/owin/psk/app/scripts/profile.js" "$wix_root_directory/profile.js.bk" && \ * cp "${source_code_directory}/owin/psk/app/index.html" "$wix_root_directory/index.html.bk" && \ * sed -e 's/<\%=version\%>/'$current_year'.'$current_month'.'$current_day' v('$current_build')/g' "${wix_root_directory}/profile.js.bk" > "${wix_root_directory}/profile.js" && \ * sed -e 's/<\%=version\%>/'$current_year'.'$current_month'.'$current_day' v('$current_build')/g' "${wix_root_directory}/index.html.bk" > "${wix_root_directory}/index.html" && \ * rm -f "$wix_input_directory/app/scripts/profile.js" && cp "$wix_root_directory/profile.js" "$wix_input_directory/app/scripts/profile.js" && \ * rm -f "$wix_input_directory/app/index.html" && cp "$wix_root_directory/index.html" "$wix_input_directory/app/index.html" * * * * * * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * * * * * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); * File.Copy(mmria_console_binary_directory_path + "/", input_directory_path + "/"); */ CopyFolder.CopyDirectory(input_directory_path, output_directory_path); //Console.WriteLine("Hello World!"); string name_hash_file_name = "id.csv"; string wix_output_msi_file_name = $"MMRIA-Install-{current_version}.msi"; string wix_file_name = "output.xml"; name_hash_list = new System.Collections.Generic.Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); if (System.IO.File.Exists(name_hash_file_name)) { using (System.IO.TextReader reader = System.IO.File.OpenText(name_hash_file_name)) { string file = reader.ReadToEnd(); string[] line_list = file.Split('\n'); for (int i = 0; i < line_list.Length; i++) { string[] name_hash = line_list[i].Split(','); if (name_hash.Length > 1) { name_hash_list.Add(name_hash[0].Trim(), name_hash[1].Trim()); } } } } string xml = get_xml_template(); var xmlReader = XmlReader.Create(new StringReader(xml)); XDocument wix_doc = XDocument.Load(xmlReader); var namespaceManager = new XmlNamespaceManager(xmlReader.NameTable); namespaceManager.AddNamespace("prefix", "http://schemas.microsoft.com/wix/2006/wi"); XElement ProductElement = wix_doc.XPathSelectElement("prefix:Wix/prefix:Product", namespaceManager); ProductElement.Attribute("Id").SetValue(get_id("PRODUCT_ID")); ProductElement.Attribute("UpgradeCode").SetValue(get_id("PRODUCT_UPGRADECODE")); Console.WriteLine("Product"); Console.WriteLine(ProductElement.Attribute("Name")); Console.WriteLine(ProductElement.Attribute("Id")); Console.WriteLine(ProductElement.Attribute("UpgradeCode")); Console.WriteLine(ProductElement.Attribute("Manufacturer")); Console.WriteLine(ProductElement.Attribute("Version")); XElement PackageElement = ProductElement.XPathSelectElement("./prefix:Package", namespaceManager); Console.WriteLine("Package"); Console.WriteLine(PackageElement.Attribute("Description")); Console.WriteLine(PackageElement.Attribute("Comments")); Console.WriteLine(PackageElement.Attribute("Manufacturer")); //Console.WriteLine(PackageElement.Attribute("Manufacturer")); //Console.WriteLine(PackageElement.Attribute("Version")); XElement MediaElement = ProductElement.XPathSelectElement("./prefix:Media", namespaceManager); Console.WriteLine("Media"); Console.WriteLine(MediaElement.Attribute("Cabinet")); XElement PropertyElement = ProductElement.XPathSelectElement("./prefix:Property", namespaceManager); Console.WriteLine("Property"); Console.WriteLine(PropertyElement.Attribute("Id")); Console.WriteLine(PropertyElement.Attribute("Value")); XElement IconElement = ProductElement.XPathSelectElement("./prefix:Icon", namespaceManager); Console.WriteLine("Icon"); print_xattribute(IconElement.Attribute("Id"), IconElement.Attribute("SourceFile")); XElement DirectoryElement = ProductElement.XPathSelectElement(".//prefix:Directory[@Id='INSTALLDIR']", namespaceManager); Console.WriteLine("Directory"); print_xattribute(DirectoryElement.Attribute("Id"), DirectoryElement.Attribute("Name")); XElement FeatureElement = ProductElement.XPathSelectElement("./prefix:Feature", namespaceManager); Console.WriteLine("Feature"); print_xattribute(FeatureElement.Attribute("Id"), FeatureElement.Attribute("Level")); // removed components and features foreach (XElement ComponentElement in ProductElement.XPathSelectElements(".//prefix:Component", namespaceManager).ToList()) { if (ComponentElement.Attribute("Id").Value != "ProgramMenuDir") { ComponentElement.Remove(); } } foreach (XElement ComponentRefElement in FeatureElement.XPathSelectElements(".//prefix:ComponentRef", namespaceManager).ToList()) { if (ComponentRefElement.Attribute("Id").Value != "ProgramMenuDir") { ComponentRefElement.Remove(); } } AddComponents(DirectoryElement, FeatureElement, new System.IO.DirectoryInfo(output_directory_path)); Console.WriteLine("Components"); foreach (XElement ComponentElement in ProductElement.XPathSelectElements(".//prefix:Component", namespaceManager)) { ComponentElement.Attribute("Guid").SetValue(get_id(ComponentElement.Attribute("Id").Value)); print_xattribute(ComponentElement.Attribute("Id"), ComponentElement.Attribute("Guid")); XElement FileElement = ComponentElement.XPathSelectElement("./prefix:File", namespaceManager); if (FileElement != null) { print_xattribute(FileElement.Attribute("Id"), FileElement.Attribute("Name")); } /* * XElement new_node = new_file_node(); * new_node.Add(new_short_cut_node()); * ComponentElement.Add(new_node); */ } Console.WriteLine("ComponentRefs"); foreach (XElement ComponentRefElement in ProductElement.XPathSelectElements(".//prefix:ComponentRef", namespaceManager)) { print_xattribute(ComponentRefElement.Attribute("Id")); } wix_doc.Save(wix_file_name); System.Text.RegularExpressions.Regex major_version_tag = new System.Text.RegularExpressions.Regex("<\\%=major_version\\%>"); System.Text.RegularExpressions.Regex minor_version_tag = new System.Text.RegularExpressions.Regex("<\\%=minor_version\\%>"); string text = File.ReadAllText(wix_file_name); text = System.Text.RegularExpressions.Regex.Replace(text, "xmlns=\"\"", ""); text = major_version_tag.Replace(text, major_version); text = minor_version_tag.Replace(text, minor_version); File.WriteAllText(Path.Combine(output_directory_path, wix_file_name), text); System.Text.StringBuilder name_hash_file_builder = new StringBuilder(); foreach (System.Collections.Generic.KeyValuePair <string, string> kvp in name_hash_list) { name_hash_file_builder.Append(kvp.Key); name_hash_file_builder.Append(","); name_hash_file_builder.AppendLine(kvp.Value); } System.IO.File.WriteAllText(name_hash_file_name, name_hash_file_builder.ToString()); //var FieldsTypeIDs = from _FieldTypeID in wix_doc.Descendants("Field") select _FieldTypeID; //double width, height; //string checkcode = ViewElement.Attribute("CheckCode").Value.ToString(); /* * * StringBuilder JavaScript = new StringBuilder(); * StringBuilder VariableDefinitions = new StringBuilder(); * * XDocument xdocResponse = XDocument.Parse(""); * * XDocMetadata.RequiredFieldsList = xdocResponse.Root.Attribute("RequiredFieldsList").Value; * XDocMetadata.HiddenFieldsList = xdocResponse.Root.Attribute("HiddenFieldsList").Value; * XDocMetadata.HighlightedFieldsList = xdocResponse.Root.Attribute("HighlightedFieldsList").Value; * XDocMetadata.DisabledFieldsList = xdocResponse.Root.Attribute("DisabledFieldsList").Value; * */ //System.IO.File.Copy ("./mmria.exe.config", System.IO.Path.Combine (output_directory_path, "mmria.exe.config"), true); //System.IO.File.Copy ("./mmria-server.exe.config", System.IO.Path.Combine (output_directory_path, "mmria-server.exe.config"), true); //"C:\Program Files (x86)\WiX Toolset v3.11\bin\candle" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" .\output\output.xml //"C:\Program Files (x86)\WiX Toolset v3.11\bin\light" -ext "C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll" output.wixobj execute_shell(build_directory_path, wix_directory_path + @"\bin\candle", @" -ext ""C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll"" -ext ""C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll"" .\output\output.xml"); execute_shell(build_directory_path, wix_directory_path + @"\bin\light", @" -ext ""C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll"" -ext ""C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll"" -cultures:en-us .\output.wixobj"); System.IO.File.Copy(build_directory_path + "/output.msi", build_directory_path + "/" + wix_output_msi_file_name, true); System.IO.File.Delete(build_directory_path + "/output.msi"); install.setup.util.cFolderCompressor folder_compressor = new install.setup.util.cFolderCompressor(); folder_compressor.Compress ( System.IO.Path.Combine(System.IO.Path.Combine(build_directory_path, wix_output_msi_file_name.Replace(".msi", ".zip"))), null, // string password System.IO.Path.Combine(System.IO.Path.Combine(build_directory_path, "output")) ); }