public void TestUninstallMspSilentMode() { Console.WriteLine("TestUninstallMspSilentMode"); InstallUILevel[] testUILevels = { InstallUILevel.basic, InstallUILevel.silent }; foreach (InstallUILevel uilevel in testUILevels) { // a configuration with no components ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); configFile.Children.Add(setupConfiguration); ComponentMsp msp = new ComponentMsp(); msp.package = "mspdoesntexist.msp"; msp.uninstall_cmdparameters = ""; msp.uninstall_cmdparameters_basic = "/qb-"; msp.uninstall_cmdparameters_silent = "/qb-"; InstalledCheckFile self = new InstalledCheckFile(); self.filename = dotNetInstallerExeUtils.Executable; self.comparison = installcheckfile_comparison.exists; msp.Children.Add(self); setupConfiguration.Children.Add(msp); // silent install, no dialog messages configFile.ui_level = uilevel; // save config file string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); // execute dotNetInstaller dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.uninstall = true; Assert.AreEqual(1619, dotNetInstallerExeUtils.Run(options)); File.Delete(configFilename); } }
public void TestAutoClosesBeforeInstallWhenComponentIsAlreadyInstalled() { Console.WriteLine("TestAutoClosesBeforeInstallWhenComponentIsAlreadyInstalled"); // configuration with a component that is already installed and so dni will auto close // marker that makes installed check succeed before installation string markerFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); File.Create(markerFilename).Close(); ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); setupConfiguration.auto_start = true; setupConfiguration.auto_close_if_installed = true; setupConfiguration.installation_completed = null; setupConfiguration.installation_none = null; setupConfiguration.supports_uninstall = false; // prevent switching to uninstall configFile.Children.Add(setupConfiguration); // dummy component ComponentCmd component = new ComponentCmd(); setupConfiguration.Children.Add(component); component.required_install = true; component.supports_install = true; component.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename); InstalledCheckFile check = new InstalledCheckFile(); check.filename = markerFilename; check.comparison = installcheckfile_comparison.exists; component.Children.Add(check); string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.quiet = false; // will auto close since all components are already installed Assert.AreEqual(0, dotNetInstallerExeUtils.Run(options, TimeSpan.FromSeconds(3))); File.Delete(configFilename); File.Delete(markerFilename); }
public void TestDefaultSelectionUninstall() { Console.WriteLine("TestDefaultSelectionUninstall"); InstalledCheckFile existsCheck = new InstalledCheckFile(); existsCheck.filename = dotNetInstallerExeUtils.Executable; existsCheck.comparison = installcheckfile_comparison.exists; ConfigFile configFile = new ConfigFile(); // setup configuration SetupConfiguration setupConfiguration = new SetupConfiguration(); configFile.Children.Add(setupConfiguration); // dummy component 1 ComponentCmd component1 = new ComponentCmd(); setupConfiguration.Children.Add(component1); component1.uninstall_command = "cmd.exe /C exit /b 57"; component1.selected_uninstall = true; component1.supports_uninstall = true; component1.Children.Add(existsCheck); // dummy component 2 ComponentCmd component2 = new ComponentCmd(); setupConfiguration.Children.Add(component2); component2.uninstall_command = "cmd.exe /C exit /b 42"; component2.selected_uninstall = false; component2.supports_uninstall = true; component2.Children.Add(existsCheck); // second component is selected and runs, not the first one string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.uninstall = true; Assert.AreEqual(57, dotNetInstallerExeUtils.Run(options)); // first component is selected and runs component2.selected_uninstall = true; Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); Assert.AreEqual(42, dotNetInstallerExeUtils.Run(options)); File.Delete(configFilename); }
public void TestAutoStartCmdLine() { Console.WriteLine("TestAutoStartCmdLine"); ConfigFile configFile = new ConfigFile(); // setup configuration SetupConfiguration setupConfiguration = new SetupConfiguration(); setupConfiguration.auto_start = false; setupConfiguration.auto_close_if_installed = true; setupConfiguration.installation_completed = string.Empty; setupConfiguration.installation_none = string.Empty; configFile.Children.Add(setupConfiguration); // marker that makes installed check succeeed after installation string markerFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); // dummy component ComponentCmd component = new ComponentCmd(); setupConfiguration.Children.Add(component); component.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename); InstalledCheckFile check = new InstalledCheckFile(); check.filename = markerFilename; check.comparison = installcheckfile_comparison.exists; component.Children.Add(check); // configuration component.installcompletemessage = string.Empty; string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.quiet = false; options.reboot = false; options.autostart = true; Assert.AreEqual(0, dotNetInstallerExeUtils.Run(options)); Assert.IsTrue(File.Exists(markerFilename)); File.Delete(configFilename); File.Delete(markerFilename); }
public void TestUninstallAutoWithOptionalComponent() { Console.WriteLine("TestUninstallAutoWithOptionalComponent"); // a component that's already installed ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); configFile.Children.Add(setupConfiguration); ComponentCmd cmd = new ComponentCmd(); setupConfiguration.Children.Add(cmd); cmd.id = "cmd1"; cmd.command = "cmd.exe /C exit /b 1"; // would fail if ran cmd.uninstall_command = "cmd.exe /C exit /b 0"; cmd.supports_install = true; cmd.supports_uninstall = true; InstalledCheckFile check = new InstalledCheckFile(); cmd.Children.Add(check); check.comparison = installcheckfile_comparison.exists; check.filename = dotNetInstallerExeUtils.Executable; // a second component that is optional ComponentCmd cmd2 = new ComponentCmd(); setupConfiguration.Children.Add(cmd2); cmd2.id = "cmd2"; cmd2.command = "cmd.exe /C exit /b 1"; // would fail if ran cmd2.uninstall_command = "cmd.exe /C exit /b 1"; // would fail if ran cmd2.supports_install = true; cmd2.required_install = false; cmd2.supports_uninstall = false; cmd2.Children.Add(check); string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); // will fallback to uninstall since all required components are installed Assert.AreEqual(0, dotNetInstallerExeUtils.Run(configFilename)); File.Delete(configFilename); }
public void TestAutoCloseIfInstalledWithComponentInstallSuccess() { Console.WriteLine("TestAutoCloseIfInstalledWithComponentInstallSuccess"); //configuration with a component that will run and succeed and so dni will auto close // marker that makes installed check succeeed after installation string markerFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); setupConfiguration.auto_start = true; setupConfiguration.auto_close_if_installed = true; configFile.Children.Add(setupConfiguration); // dummy component ComponentCmd component = new ComponentCmd(); setupConfiguration.Children.Add(component); component.required_install = true; component.supports_install = true; component.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename); InstalledCheckFile check = new InstalledCheckFile(); check.filename = markerFilename; check.comparison = installcheckfile_comparison.exists; component.Children.Add(check); string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); // will auto close since all components installed successfully Assert.AreEqual(0, dotNetInstallerExeUtils.Run(configFilename)); File.Delete(configFilename); File.Delete(markerFilename); }
public void TestAutoClosesAfterInstallWhenCheckedComponentsInstallSucceeds() { Console.WriteLine("TestAutoClosesAfterInstallWhenCheckedComponentsInstallSucceeds"); // configuration with two selected components and one unselected component // selected components will run and succeed, and so dni will auto close // marker that makes installed check succeed after installation string markerFilename1 = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); string markerFilename2 = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); setupConfiguration.auto_start = true; setupConfiguration.auto_close_if_installed = true; setupConfiguration.installation_completed = null; configFile.Children.Add(setupConfiguration); // required and selected component ComponentCmd component1 = new ComponentCmd(); setupConfiguration.Children.Add(component1); component1.required_install = true; component1.selected_install = true; component1.supports_install = true; component1.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename1); InstalledCheckFile check1 = new InstalledCheckFile(); check1.filename = markerFilename1; check1.comparison = installcheckfile_comparison.exists; component1.Children.Add(check1); // optional and selected component ComponentCmd component2 = new ComponentCmd(); setupConfiguration.Children.Add(component2); component2.required_install = false; component2.selected_install = true; component2.supports_install = true; component2.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename2); InstalledCheckFile check2 = new InstalledCheckFile(); check2.filename = markerFilename2; check2.comparison = installcheckfile_comparison.exists; component2.Children.Add(check2); // optional and unselected component ComponentCmd component3 = new ComponentCmd(); setupConfiguration.Children.Add(component3); component3.required_install = false; component3.selected_install = false; component3.supports_install = true; component3.command = "cmd.exe /C exit /b 1"; string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.quiet = false; // will auto close since all checked components were installed Assert.AreEqual(0, dotNetInstallerExeUtils.Run(options, TimeSpan.FromSeconds(6))); File.Delete(configFilename); File.Delete(markerFilename1); File.Delete(markerFilename2); }
public void TestPromptForOptionalSet() { Console.WriteLine("TestPromptForOptionalSet"); // configuration with a required and optional component // will prompt for the optional component, auto-start and install it string markerFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); ConfigFile configFile = new ConfigFile(); SetupConfiguration setupConfiguration = new SetupConfiguration(); setupConfiguration.auto_start = true; setupConfiguration.auto_close_if_installed = true; setupConfiguration.prompt_for_optional_components = true; setupConfiguration.installation_completed = string.Empty; setupConfiguration.installation_none = string.Empty; configFile.Children.Add(setupConfiguration); // dummy required component ComponentCmd component_required = new ComponentCmd(); setupConfiguration.Children.Add(component_required); component_required.required_install = true; component_required.supports_install = true; component_required.command = "dummy"; InstalledCheckRegistry check_required = new InstalledCheckRegistry(); check_required.fieldname = string.Empty; check_required.path = "SOFTWARE"; check_required.comparison = installcheckregistry_comparison.exists; component_required.Children.Add(check_required); // dummy optional component ComponentCmd component_optional = new ComponentCmd(); setupConfiguration.Children.Add(component_optional); component_optional.required_install = false; component_optional.supports_install = true; component_optional.command = string.Format("cmd.exe /C dir > \"{0}\"", markerFilename); InstalledCheckFile check_optional = new InstalledCheckFile(); check_optional.filename = markerFilename; check_optional.comparison = installcheckfile_comparison.exists; component_optional.Children.Add(check_optional); string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); Console.WriteLine("Writing '{0}'", configFilename); configFile.SaveAs(configFilename); // will not auto close since all components installed successfully dotNetInstallerExeUtils.RunOptions options = new dotNetInstallerExeUtils.RunOptions(configFilename); options.quiet = false; options.autostart = true; Assert.AreEqual(0, dotNetInstallerExeUtils.Run(options)); Assert.IsTrue(File.Exists(markerFilename)); File.Delete(configFilename); File.Delete(markerFilename); }
public void HideComponentIfInstalled_WithComponentAlreadyInstalledDuringInstallSequence_HidesComponent() { string dotNetInstallerExeFilePath = dotNetInstallerExeUtils.Executable; bool usingHtmlInstaller = dotNetInstallerExeFilePath.EndsWith("htmlInstaller.exe"); // create configuration file ConfigFile configFile = new ConfigFile(); // add a setup configuration SetupConfiguration setupConfiguration = new SetupConfiguration(); configFile.Children.Add(setupConfiguration); // add a component that is hidden if it's already installed ComponentCmd componentAlreadyInstalled = new ComponentCmd(); componentAlreadyInstalled.hide_component_if_installed = true; setupConfiguration.Children.Add(componentAlreadyInstalled); // make the component appear to be already installed InstalledCheckFile existsCheck = new InstalledCheckFile(); existsCheck.filename = dotNetInstallerExeUtils.Executable; existsCheck.comparison = installcheckfile_comparison.exists; componentAlreadyInstalled.Children.Add(existsCheck); // add another component that is not already installed ComponentCmd componentNotInstalled = new ComponentCmd(); setupConfiguration.Children.Add(componentNotInstalled); // save the configuration file string configFilename = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".xml"); configFile.SaveAs(configFilename); // execute dotNetInstaller string arguments = string.Format("/ConfigFile {0}", configFilename); using (Application dotNetInstaller = Application.Launch(new ProcessStartInfo(dotNetInstallerExeFilePath, arguments))) { // get the main install window Window mainWindow = dotNetInstaller.GetWindow("APPLICATION_NAME Installer", InitializeOption.NoCache); if (usingHtmlInstaller) { // get all the checkboxes in the window IUIItem[] checkBoxes = mainWindow.GetMultiple(SearchCriteria.ByControlType(typeof(CheckBox))); // assert that there's only one checkbox Assert.AreEqual(1, checkBoxes.Length); Assert.AreEqual("command1 ", checkBoxes[0].Name); } else { // using dotNetInstaller // get the components list box ListBox componentsList = mainWindow.Get <ListBox>(); // assert that only one component is in the list Assert.AreEqual(1, componentsList.Items.Count); Assert.AreEqual("command1 ", componentsList.Items[0].Name); } } }