/// <summary> /// Parses the names of the directories and creates a VersionedDirectory for each directory whose name could be parsed into a Version /// </summary> /// <param name="directories"></param> /// <returns></returns> private VersionedDirectory[] CreateVersionedFiles(DirectoryInfo[] directories) { try { ArrayList array = new ArrayList(); foreach (DirectoryInfo directory in directories) { try { Version version = new Version(directory.Name); VersionedDirectory versionedFile = new VersionedDirectory(version, directory); array.Add(versionedFile); } catch { } } VersionedDirectory[] versionedFiles = array.ToArray(typeof(VersionedDirectory)) as VersionedDirectory[]; versionedFiles = VersionedDirectory.Sort(versionedFiles); return(versionedFiles); } catch (System.Exception systemException) { System.Diagnostics.Trace.WriteLine(systemException); } return(null); }
/// <summary> /// Attempts to start the newest version of the executable named the same thing as the executing assembly /// </summary> /// <param name="versionedDirectories"></param> /// <param name="versionStarted"></param> /// <returns></returns> private bool StartNewestVersion( Assembly executable, VersionedDirectory[] versionedDirectories, out VersionedDirectory versionStarted, IProgressViewer progressViewer) { versionStarted = null; try { // get the name of this assembly which will be what we look for to start string assemblyName = string.Format("{0}.exe", executable.GetName().Name); // will start with the newest version because they are sorted foreach (VersionedDirectory versionToStart in versionedDirectories) { // format the path to the version we are going to attempt to start string path = Path.Combine(versionToStart.Directory.FullName, assemblyName); bool started = false; // if the file exists if (File.Exists(path)) { ProgressViewer.SetExtendedDescription(progressViewer, "Bootstrap: Starting version " + versionToStart.Version.ToString() + "..."); Process p = new Process(); p.StartInfo.FileName = path; p.StartInfo.Arguments = System.Environment.CommandLine; p.StartInfo.WorkingDirectory = versionToStart.Directory.FullName; p.StartInfo.WindowStyle = Process.GetCurrentProcess().StartInfo.WindowStyle; // try to start this version started = p.Start(); } // if a version was started if (started) { // keep track of which version we started versionStarted = versionToStart; return(true); } } } catch (System.Exception systemException) { System.Diagnostics.Trace.WriteLine(systemException); } return(false); }
private bool DeleteOlderVersions( VersionedDirectory[] versionedDirectories, VersionedDirectory versionStarted, IProgressViewer progressViewer) { try { // grab the newest version VersionedDirectory newestVersion = versionedDirectories[0]; // loop thru and delete the oldest versions not in use foreach (VersionedDirectory version in versionedDirectories) { // keep the newest version and the one that started if (version != newestVersion && version != versionStarted) { try { ProgressViewer.SetExtendedDescription(progressViewer, "Bootstrap: Removing older version " + version.Version.ToString() + "..."); // recursively delete this version directory Directory.Delete(version.Directory.FullName, true); } catch (System.Exception systemException) { System.Diagnostics.Trace.WriteLine(systemException); } } } } catch (System.Exception systemException) { System.Diagnostics.Trace.WriteLine(systemException); } return(false); }