private static ActionResult ExecuteScriptsFromXmlDataProperty(Session session, string XmlDataProperty, string installAction) { MessageResult iResult; using (var hActionRec = new Record(3)) { hActionRec[1] = XmlDataProperty; hActionRec[2] = "Setup Scripts"; hActionRec[3] = "[1] of [2], [3]"; iResult = session.Message(InstallMessage.ActionStart, hActionRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } // Tell the installer to use explicit progress messages. using (var hProgressRec = new Record(3)) { hProgressRec[1] = 1; hProgressRec[2] = 1; hProgressRec[3] = 0; iResult = session.Message(InstallMessage.Progress, hProgressRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } try { CustomActionData data = session.CustomActionData; foreach (var datum in data) { string script = Encoding.Unicode.GetString(Convert.FromBase64String(datum.Value)); session.Log("Executing PowerShell script:\n{0}", script); using (var task = new PowerShellTask(script, session)) { var result = task.Execute(); session.Log("PowerShell non-terminating errors: {0}", !result); if (!result) { session.Log("Returning Failure"); return(ActionResult.Failure); } } } return(ActionResult.Success); } catch (Exception ex) { session.Log("PowerShell terminating error, returning Failure"); session.Log(ex.ToString()); return(ActionResult.Failure); } }
private static ActionResult ExecuteScriptFilesFromXmlDataProperty(Session session, string XmlDataProperty, string installAction) { // Installer is executing the installation script. Set up a // record specifying appropriate templates and text for // messages that will inform the user about what the custom // action is doing. Tell the installer to use this template and // text in progress messages. MessageResult iResult; using (var hActionRec = new Record(3)) { hActionRec[1] = XmlDataProperty; hActionRec[2] = "Setup Files"; hActionRec[3] = "[1] of [2], [3]"; iResult = session.Message(InstallMessage.ActionStart, hActionRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } // Tell the installer to use explicit progress messages. using (var hProgressRec = new Record(3)) { hProgressRec[1] = 1; hProgressRec[2] = 1; hProgressRec[3] = 0; iResult = session.Message(InstallMessage.Progress, hProgressRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } try { if (!session.CustomActionData.ContainsKey("xml")) { session.Log("Skipping as no CustomActionData key 'xml'"); return(ActionResult.NotExecuted); } string content = session.CustomActionData["xml"]; XDocument doc = XDocument.Parse(content); foreach (XElement row in doc.Root.Elements("d")) { string file = row.Attribute("file").Value; string arguments = row.Attribute("args").Value; string IgnoreErrors = row.Attribute("IgnoreErrors").Value; string action = row.Attribute("InstallAction").Value; //if (action == installAction) //{ using (var task = new PowerShellTask(file, arguments, session)) { try { bool result = task.Execute(); session.Log("PowerShell non-terminating errors: {0}", !result); if (!result) { if (!IgnoreErrors.Equals("0")) { session.Log("Ignoring failure due to 'IgnoreErrors' marking"); } else { session.Log("Returning Failure"); return(ActionResult.Failure); } } } catch (Exception ex) { if (!IgnoreErrors.Equals("0")) { session.Log("Ignoring PowerShell error due to 'IgnoreErrors' marking"); session.Log(ex.ToString()); } else { session.Log("PowerShell terminating error, returning Failure"); session.Log(ex.ToString()); return(ActionResult.Failure); } } } } //} return(ActionResult.Success); } catch (Exception ex) { session.Log("PowerShell terminating error, returning Failure"); session.Log(ex.ToString()); return(ActionResult.Failure); } }
private static ActionResult ScriptsDeferred(Session session, string deferredProperty) { MessageResult iResult; using (var hActionRec = new Record(3)) { hActionRec[1] = deferredProperty; hActionRec[2] = "PowerShell Scripts"; hActionRec[3] = "[1] of [2], [3]"; iResult = session.Message(InstallMessage.ActionStart, hActionRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } // Tell the installer to use explicit progress messages. using (var hProgressRec = new Record(3)) { hProgressRec[1] = 1; hProgressRec[2] = 1; hProgressRec[3] = 0; iResult = session.Message(InstallMessage.Progress, hProgressRec); } if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } try { List <ScriptActionData> scripts = new List <ScriptActionData>(); string cad = session["CustomActionData"]; XmlSerializer srlz = new XmlSerializer(scripts.GetType()); if (string.IsNullOrWhiteSpace(cad)) { session.Log("Nothing to do"); return(ActionResult.Success); } using (StringReader sr = new StringReader(cad)) { IEnumerable <ScriptActionData> tempScripts = srlz.Deserialize(sr) as IEnumerable <ScriptActionData>; if (tempScripts != null) { scripts.AddRange(tempScripts); } } foreach (ScriptActionData datum in scripts) { string script = Encoding.Unicode.GetString(Convert.FromBase64String(datum.Script)); session.Log($"Executing PowerShell script {datum.Id}:\n{script}"); using (var task = new PowerShellTask(script, session)) { bool result = false; try { result = task.Execute(); session.Log("PowerShell terminating errors: {0}", result); } catch (Exception ex) { result = false; session.Log(ex.ToString()); } if (!result) { if (datum.IgnoreErrors) { session.Log("Script execution failed. Ignoring error"); continue; } session.Log("Returning Failure"); return(ActionResult.Failure); } } } return(ActionResult.Success); } catch (Exception ex) { session.Log("PowerShell terminating error, returning Failure"); session.Log(ex.ToString()); return(ActionResult.Failure); } }