/// <summary> /// Executes the bundle with optional arguments. /// </summary> /// <param name="expectedExitCode">Expected exit code.</param> /// <param name="mode">Install mode.</param> /// <param name="arguments">Optional arguments to pass to the tool.</param> /// <returns>Path to the generated log file.</returns> private string RunBundleWithArguments(int expectedExitCode, MSIExec.MSIExecMode mode, string[] arguments, bool assertOnError = true, string bundlePath = null, string layoutDirectory = null) { TestTool bundle = new TestTool(bundlePath ?? this.Bundle); var sb = new StringBuilder(); // Be sure to run silent. sb.Append(" -quiet"); // Generate the log file name. string logFile = Path.Combine(Path.GetTempPath(), String.Format("{0}_{1}_{2:yyyyMMddhhmmss}_{4}_{3}.log", this.TestGroupName, this.TestName, DateTime.UtcNow, Path.GetFileNameWithoutExtension(this.Bundle), mode)); sb.AppendFormat(" -log \"{0}\"", logFile); // Set operation. switch (mode) { case MSIExec.MSIExecMode.AdministrativeInstall: sb.Append($" -layout \"{layoutDirectory}\""); break; case MSIExec.MSIExecMode.Modify: sb.Append(" -modify"); break; case MSIExec.MSIExecMode.Repair: sb.Append(" -repair"); break; case MSIExec.MSIExecMode.Cleanup: case MSIExec.MSIExecMode.Uninstall: sb.Append(" -uninstall"); break; } // Add additional arguments. if (null != arguments) { sb.Append(" "); sb.Append(String.Join(" ", arguments)); } // Set the arguments. bundle.Arguments = sb.ToString(); // Run the tool and assert the expected code. bundle.ExpectedExitCode = expectedExitCode; bundle.Run(assertOnError); // Return the log file name. return(logFile); }
/// <summary> /// Executes the bundle with optional arguments. /// </summary> /// <param name="expectedExitCode">Expected exit code.</param> /// <param name="mode">Install mode.</param> /// <param name="arguments">Optional arguments to pass to the tool.</param> /// <returns>Path to the generated log file.</returns> private string RunBundleWithArguments(int expectedExitCode, MSIExec.MSIExecMode mode, params string[] arguments) { TestTool bundle = new TestTool(this.Bundle, null); StringBuilder sb = new StringBuilder(); // Be sure to run silent. sb.Append(" -quiet"); // Generate the log file name. string logFile = Path.Combine(Path.GetTempPath(), String.Format("{0}_{1:yyyyMMddhhmmss}_{3}_{2}.log", this.TestName, DateTime.UtcNow, Path.GetFileNameWithoutExtension(this.Bundle), mode)); sb.AppendFormat(" -log \"{0}\"", logFile); // Set operation. switch (mode) { case MSIExec.MSIExecMode.Modify: sb.Append(" -modify"); break; case MSIExec.MSIExecMode.Repair: sb.Append(" -repair"); break; case MSIExec.MSIExecMode.Uninstall: sb.Append(" -uninstall"); break; } // Add additional arguments. if (null != arguments) { sb.Append(" "); sb.Append(String.Join(" ", arguments)); } // Set the arguments. bundle.Arguments = sb.ToString(); // Run the tool and assert the expected code. bundle.ExpectedExitCode = expectedExitCode; bundle.Run(); // Return the log file name. return(logFile); }
/// <summary> /// Runs msiexec on the given <paramref name="path"/> with zero or more property settings. /// </summary> /// <param name="path">The path to the MSI to run.</param> /// <param name="expectedExitCode">The expected exit code.</param> /// <param name="mode">The installation mode for the MSI.</param> /// <param name="properties">Zero or more properties to pass to the install.</param> /// <returns>The path to the log file.</returns> private string RunMSIWithProperties(string path, MSIExec.MSIExecReturnCode expectedExitCode, MSIExec.MSIExecMode mode, params string[] properties) { MSIExec exec = new MSIExec(); exec.ExecutionMode = mode; exec.ExpectedExitCode = expectedExitCode; exec.OtherArguments = null != properties?String.Join(" ", properties) : null; exec.Product = path; // Get the name of the calling method. StackTrace stack = new StackTrace(); string caller = stack.GetFrame(2).GetMethod().Name; // Generate the log file name. string logFile = String.Format("{0}_{1:yyyyMMddhhmmss}_{3}_{2}.log", caller, DateTime.UtcNow, Path.GetFileNameWithoutExtension(path), mode); exec.LogFile = Path.Combine(Path.GetTempPath(), logFile); exec.Run(); return(exec.LogFile); }