using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; namespace wix { class Program { /// /// The operation completed successfully. /// public const int ERROR_SUCCESS = 0; /// /// Incorrect function. /// public const int ERROR_INVALID_FUNCTION = 1; /// /// The system cannot find the file specified. /// public const int ERROR_FILE_NOT_FOUND = 2; /// /// The system cannot find the path specified. /// public const int ERROR_PATH_NOT_FOUND = 3; /// /// The system cannot open the file. /// public const int ERROR_TOO_MANY_OPEN_FILES = 4; /// /// Access is denied. /// public const int ERROR_ACCESS_DENIED = 5; const Int32 DRIVER_PACKAGE_REPAIR = 0x00000001; const Int32 DRIVER_PACKAGE_SILENT = 0x00000002; const Int32 DRIVER_PACKAGE_FORCE = 0x00000004; const Int32 DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT = 0x00000008; const Int32 DRIVER_PACKAGE_LEGACY_MODE = 0x00000010; const Int32 DRIVER_PACKAGE_DELETE_FILES = 0x00000020; [DllImport("DIFXApi.dll", CharSet = CharSet.Unicode)] public static extern Int32 DriverPackagePreinstall(string DriverPackageInfPath, Int32 Flags); static void driverinstall() { int result = DriverPackagePreinstall(@"..\Driver\Arduino MEGA 2560.inf", 0); if (result != 0) MessageBox.Show("Driver installation failed. " + result); } static int no = 0; static StreamWriter sw; static List components = new List(); static string mainexeid = ""; static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Bad Directory"); return; } if (args[0] == "driver") { driverinstall(); return; } string path = args[0]; string file = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar+ "installer.wxs"; sw = new StreamWriter(file); header(); sw.WriteLine(""); sw.WriteLine(@" "); //sw.WriteLine(""); dodirectory(path, 0); footer(); sw.Close(); /* System.Diagnostics.Process P = new System.Diagnostics.Process(); P.StartInfo.FileName = "cmd.exe"; P.StartInfo.Arguments = " /c \"" + Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "installer.bat\""; P.StartInfo.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); P.Start(); */ //Console.ReadLine(); } static void header() { string newid = System.Guid.NewGuid().ToString(); newid = "*"; StreamReader sr = new StreamReader(File.OpenRead("../Properties/AssemblyInfo.cs")); string version = "0"; while (!sr.EndOfStream) { string line = sr.ReadLine(); if (line.Contains("AssemblyFileVersion")) { string[] items = line.Split(new char[] { '"' },StringSplitOptions.RemoveEmptyEntries); version = items[1]; break; } } sr.Close(); string data = @" "; sw.WriteLine(data); } static void footer() { string data = @" "; sw.WriteLine(data); foreach (string comp in components) { sw.WriteLine(@""); } data = @" WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed "; sw.WriteLine(data); } static void dodirectory(string path, int level = 1) { string[] dirs = Directory.GetDirectories(path); if (level != 0) sw.WriteLine(""); string[] files = Directory.GetFiles(path); no++; sw.WriteLine(""); components.Add("_comp"+no); foreach (string filepath in files) { if (filepath.ToLower().EndsWith("release\\config.xml") || filepath.ToLower().Contains("ardupilotplanner.log") || filepath.ToLower().Contains("dataflash.bin") || filepath.ToLower().Contains(".etag")) continue; no++; sw.WriteLine(""); if (filepath.EndsWith("ArdupilotMegaPlanner.exe")) { mainexeid = "_" + no; } } sw.WriteLine(""); foreach (string dir in dirs) { if (dir.EndsWith("gmapcache") || dir.EndsWith("srtm")) continue; dodirectory(dir); } if (level != 0) sw.WriteLine(""); } static string fixname(string name) { name = name.Replace("-", "_"); name = name.Replace(" ", "_"); name = name.Replace(" ", "_"); return name; } } }