internal void Restart(DTE dte, bool elevated) { var currentProcess = Process.GetCurrentProcess(); var parser = new ArgumentParser(dte.CommandLineArguments); if (currentProcess.MainModule == null) { return; } var builder = new RestartProcessBuilder() .WithDevenv(currentProcess.MainModule.FileName).WithArguments(parser.GetArguments()); var openedItem = GetOpenedItem(dte); if (openedItem != OpenedItem.None) { if (openedItem.IsSolution) { builder.WithSolution(openedItem.Name); } else { builder.WithProject(openedItem.Name); } } if (elevated) { builder.WithElevatedPermission(); } const string commandName = "File.Exit"; var closeCommand = dte.Commands.Item(commandName); CommandEvents closeCommandEvents = null; if (closeCommand != null) { closeCommandEvents = dte.Events.CommandEvents[closeCommand.Guid, closeCommand.ID]; } // Install the handler // ReSharper disable once UnusedVariable var handler = new VisualStudioEventHandler(dte.Events.DTEEvents, closeCommandEvents, builder.Build()); if (closeCommand != null && closeCommand.IsAvailable) { // if the Exit command is present, execute it with all graceful dialogs by VS dte.ExecuteCommand(commandName); } else { // Close brutally dte.Quit(); } }
internal void Restart(DTE dte, bool elevated) { var currentProcess = Process.GetCurrentProcess(); var parser = new ArgumentParser(dte.CommandLineArguments); var builder = new RestartProcessBuilder() .WithDevenv(currentProcess.MainModule.FileName) .WithArguments(parser.GetArguments()); var openedItem = GetOpenedItem(dte); if (openedItem != OpenedItem.None) { if (openedItem.IsSolution) { builder.WithSolution(openedItem.Name); } else { builder.WithProject(openedItem.Name); } } if (elevated) { builder.WithElevatedPermission(); } const string commandName = "File.Exit"; var closeCommand = dte.Commands.Item(commandName); CommandEvents closeCommandEvents = null; if (closeCommand != null) { closeCommandEvents = dte.Events.CommandEvents[closeCommand.Guid, closeCommand.ID]; } // Install the handler var handler = new VisualStudioEventHandler(dte.Events.DTEEvents, closeCommandEvents, builder.Build()); if (closeCommand != null && closeCommand.IsAvailable) { // if the Exit commad is present, execute it with all gracefulls dialogs by VS dte.ExecuteCommand(commandName); } else { // Close brutally dte.Quit(); } }