using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Linq; using System.IO; using System.Xml; namespace ProjectScannerSetupClass { [RunInstaller(true)] public partial class ProjectScannerSetup : Installer { public ProjectScannerSetup() { InitializeComponent(); } protected override void OnAfterInstall(IDictionary savedState) { base.OnAfterInstall(savedState); try { string UserProfile = Environment.GetEnvironmentVariable("USERPROFILE"); string PathToP4VSettings = Path.Combine(UserProfile, ".p4qt"); string CustomToolsXML = Path.Combine(PathToP4VSettings, "customtools.xml"); XmlDocument xml = new XmlDocument(); XmlNode rootNode; if (!File.Exists(CustomToolsXML) || new FileInfo(CustomToolsXML).Length == 0) { xml.AppendChild(xml.CreateXmlDeclaration("1.0", "UTF-8", "no")); rootNode = xml.AppendChild(xml.CreateElement("CustomToolDefList")); rootNode.Attributes.Append(xml.CreateAttribute("varName")); rootNode.Attributes["varName"].Value = "customtooldeflist"; } else { xml.Load(CustomToolsXML); rootNode = xml.SelectSingleNode("/CustomToolDefList"); } XmlNode NewTool; XmlNode ToolDef; XmlNode subNode; NewTool = xml.SelectSingleNode("/CustomToolDefList/CustomToolDef/Definition/Name[contains(.,'Rename && change paths in techno files')]"); if (NewTool == null) { NewTool = xml.CreateElement("CustomToolDef"); ToolDef = xml.CreateElement("Definition"); subNode = ToolDef.AppendChild(xml.CreateElement("Name")); subNode.InnerText = "Rename && change paths in techno files"; subNode = ToolDef.AppendChild(xml.CreateElement("Command")); subNode.InnerText = Path.Combine(Context.Parameters["TargetDir"], "ProjectScannerP4V.exe"); subNode = ToolDef.AppendChild(xml.CreateElement("Arguments")); subNode.InnerText = "move $c $p $u %D"; subNode = NewTool.AppendChild(xml.CreateElement("AddToContext")); subNode.InnerText = "true"; NewTool.AppendChild(ToolDef); rootNode.AppendChild(NewTool); } else { NewTool.SelectSingleNode("../Arguments").InnerText = "move $i $p $u %D"; NewTool.SelectSingleNode("../Command").InnerText = Path.Combine(Context.Parameters["TargetDir"], "ProjectScannerP4V.exe"); } NewTool = xml.SelectSingleNode("/CustomToolDefList/CustomToolDef/Definition/Name[contains(.,'Change paths in techno files')]"); if (NewTool == null) { NewTool = xml.CreateElement("CustomToolDef"); ToolDef = xml.CreateElement("Definition"); subNode = ToolDef.AppendChild(xml.CreateElement("Name")); subNode.InnerText = "Change paths in techno files"; subNode = ToolDef.AppendChild(xml.CreateElement("Command")); subNode.InnerText = Path.Combine(Context.Parameters["TargetDir"], "ProjectScannerP4V.exe"); subNode = ToolDef.AppendChild(xml.CreateElement("Arguments")); subNode.InnerText = "change $i $p $u %D"; subNode = NewTool.AppendChild(xml.CreateElement("AddToContext")); subNode.InnerText = "true"; NewTool.AppendChild(ToolDef); rootNode.AppendChild(NewTool); } else { NewTool.SelectSingleNode("../Arguments").InnerText = "change $c $p $u %D"; NewTool.SelectSingleNode("../Command").InnerText = Path.Combine(Context.Parameters["TargetDir"], "ProjectScannerP4V.exe"); } xml.Save(CustomToolsXML); } catch (System.Exception ex) { throw new InstallException("Install aborted\nreason:\n" + ex.ToString(), ex); } } } }