using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Eugen.NX { /// /// Description of NxVersion. /// public class NxVersion { #region Version und Copyright // Version und Copyright string dllName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen string dllVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); string copyright = GenerateCopyright(); string icon = Application.StartupPath + "\\Info.bmp"; //Assembly Datum und Zeit static DateTime value = AssemblyDateTime(); string date = value.ToShortDateString(); string time = value.ToLongTimeString(); private static DateTime AssemblyDateTime() { var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision)); //Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original) return buildDateTime; } private static string CurrentYear() { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } private static string StartYear() { string startYear = ""; if (((AssemblyCopyrightAttribute)attributes[0]).Copyright.Contains("Copyright © ")) { startYear = ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace("Copyright © ", ""); while (startYear.StartsWith(" ")) { startYear = startYear.Remove(0, 1); } startYear = startYear.Remove(startYear.IndexOf(" ")); return startYear; } else { DateTime dtn = DateTime.Now; return dtn.Year.ToString(); } } private static string GenerateCopyright() { string startYear = StartYear(); string currentYear = CurrentYear(); if (startYear == currentYear) { return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; } else { return ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace(startYear, String.Concat(startYear, "-", currentYear)); } } #endregion #region DLL-Info /// /// Contains the name of the program file /// public static string DllName { set; get; } /// /// Contains the version of the program file /// public static string DllVersion { set; get; } /// /// Contains the copyright notice /// public static string Copyright { set; get; } private void SetDllInfo() { //Name, Version und Copyright setzen DllName = dllName; DllVersion = dllVersion; Copyright = copyright; } #endregion public NxVersion() { SetDllInfo(); } public NxVersion(string ugiiBaseDir) { SetDllInfo(); if (Directory.Exists(ugiiBaseDir)) { UgiiBaseDir = ugiiBaseDir; UgiiRootDir = String.Concat(UgiiBaseDir, "\\UGII\\"); } else { throw new DirectoryNotFoundException(); } string nxVersionNo = ReadNxEnvValues(UgiiRootDir, "-n").Replace("\r\n", ""); if (Convert.ToInt32(ugiiBaseDir.ToLower().Remove(0, ugiiBaseDir.LastIndexOf("\\") + 3)) <= 12) { //Bis einschliesslich NX12 string tempPatchText = ReadNxEnvValues(UgiiRootDir, "-m"); tempPatchText = tempPatchText.Remove(tempPatchText.IndexOf(",")); string nxVerString = ReadNxEnvValues(ugiiBaseDir + "\\UGII\\", "-v"); nxVerString = nxVerString.Remove(nxVerString.IndexOf("\r")); string nxCompBaseRelVer = ReadNxEnvValues(ugiiBaseDir + "\\UGII\\", "-f"); if (!String.IsNullOrEmpty(nxCompBaseRelVer)) { nxCompBaseRelVer = nxCompBaseRelVer.Remove(nxCompBaseRelVer.IndexOf("\r")); } AlignCode(nxVersionNo, tempPatchText, nxVerString, nxCompBaseRelVer); } else { //Nach NX12 AlignCode(nxVersionNo); } } #region Base value /// /// UGII_BASE_DIR. E.g.: C:\Program Files\Siemens\NX 12.0 /// public string UgiiBaseDir { set; get; } /// /// UGII_ROOT_DIR. E.g.: C:\Program Files\Siemens\NX 12.0\UGII\ /// public string UgiiRootDir { set; get; } /// /// Defines whether NX is newer than NX12. Yes=true, No=false /// public bool PostNX12 { set; get; } #endregion #region Define Type /// /// NX Version. E.g.: NX 10.0.3.5 /// public string NXversion { get; set; } /// /// NX Patch. E.g.: NX 10.0.3.5 MP4 /// public string NXpatch { get; set; } /// /// UGII_PRODUCT_NAME. E.g.: NX of NX 10.0.3.5 /// public string UgiiProductName { get; set; } /// /// UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 /// public int UgiiMajorVersion { get; set; } /// /// UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 /// public int UgiiMinorVersion { get; set; } /// /// UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 /// public int UgiiSubminorVersion { get; set; } /// /// NX Phase. E.g.: 5 of NX 10.0.3.5 /// public int NXphase { get; set; } /// /// UGII_FULL_VERSION. E.g.: v10.0.3.5 instead of NX 10.0.3.5 /// public string UgiiFullVersion { get; set; } /// /// UGII_VERSION. E.g.: v10 of v10.0.3.5 /// public string UgiiVersion { get; set; } /// /// NX_VERSION_STRING. E.g.: V28.0.3.5 instead of NX 10.0.3.5 MP4 /// public string NxVersionString { get; set; } /// /// NX_MAJOR_STRING. E.g.: V28 of V28.0.3.5 /// public string NxMajorVersionString { get; set; } /// /// NX_MINOR_STRING. E.g.: 0 of V28.0.3.5 /// public string NxMinorVersionString { get; set; } /// /// NX_SUBMINOR_STRING. E.g.: 3 of V28.0.3.5 /// public string NxSubminorVersionString { get; set; } /// /// NX_PHASE_STRING. E.g.: 5 of V28.0.3.5 /// public string NxPhaseString { get; set; } /// /// Maintenance Release. E.g.: 10.0.3.5 of NX 10.0.3.5 MP4 /// public string MaintenanceRelease { get; set; } /// /// Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 /// public string MaintenancePack { get; set; } /// /// Maintenance Pack Number. E.g.: 4 of NX 10.0.3.5 MP4 /// public int MaintenancePackNumber { get; set; } /// /// NX compatible base release version. E.g.: 1953 of 1973 /// public string NxCompatibleBaseReleaseVersion { get; set; } #endregion #region Common Private Methodes private int NxVersionNumber(string ugiiRootDir) { string nxVersion = ReadNxEnvValues(UgiiRootDir, "-n").Replace("\r\n", ""); nxVersion = nxVersion.Remove(nxVersion.IndexOf(".")).Replace("NX ", ""); return Convert.ToInt16(nxVersion); } private string ReadNxEnvValues(string ugiiRootDir, string envPrintArg) { string envPrint = String.Concat(ugiiRootDir, "env_print.exe"); return ProcessOutput(envPrint, envPrintArg); //Prozess mit env_print.exe aufrufen } private string ReadProcessOutput(string ugii_base_dir, string arguments) { // Liest die Daten nach beenden der Prozess-Ausgabe aus // Tritt ein Fehler auf, liefert die Funktion null zurück //Wenn UGII_BASE_DIR mit '\\' endet, dann diese entfernen if (ugii_base_dir.EndsWith("\\")) { ugii_base_dir = ugii_base_dir.Remove(ugii_base_dir.Length - 2); } //Überprüfen ob auf alle notwendigen Dateien (env_print.exe, libpatch.dll, libsyss.dll) zugegriffen werden kann ExecutablesExists(ugii_base_dir); //Wenn 'ugii_base_dir' existiert, dann die Werte ermitteln} return ProcessOutput(String.Concat(ugii_base_dir, "\\UGII\\env_print.exe"), arguments); } private void ExecutablesExists(string ugii_base_dir) { //Wenn eine der drei Dateien nicht existiert, dann eine Exception werfen if (!File.Exists(String.Concat(ugii_base_dir, "\\UGII\\env_print.exe"))) throw new NoEnvPrintExeException("Unable to find EnvPrint.exe"); //Nur vor 'NX 1847' ausführen, weil es nur vorher diese Biblithek gibt if (Convert.ToInt32(ugii_base_dir.ToLower().Remove(0, ugii_base_dir.LastIndexOf("\\") + 3)) <= 12 & !ugii_base_dir.ToLower().Contains("beta") & ugii_base_dir.Remove(0, ugii_base_dir.LastIndexOf("\\") + 1).Length != 2) { if (!File.Exists(String.Concat(ugii_base_dir, "\\UGII\\libpatch.dll")) & !File.Exists(String.Concat(ugii_base_dir, "\\NXBIN\\libpatch.dll"))) throw new NoLibPatchDllException("Unable to find LibPatch.dll"); } if (!File.Exists(String.Concat(ugii_base_dir, "\\UGII\\libsyss.dll"))) throw new NoLibSysDllException("Unable to find LibSys.dll"); } private string ProcessOutput(string envPrint, string envPrintArg) { try { Process process = new Process(); process.StartInfo.FileName = envPrint; process.StartInfo.Arguments = envPrintArg; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.CreateNoWindow = true; process.Start(); process.WaitForExit(); return process.StandardOutput.ReadToEnd(); } catch (Exception) { return null; } } private void AlignCode(string nxVersionNo) { //Neue NX Versionen auflösen //NX Version zerlegen string[] versionSegments = new string[3]; string[] temp = new string[2]; temp = SeperateVersionCode(nxVersionNo); for (int i = 0; i < 3; i++) { versionSegments[i] = temp[i]; } //Patch Text zerlegen //versionSegments[5] = SeperatePatchText(nxVersionNo); UgiiProductName = versionSegments[0]; //Produkt Name UgiiMajorVersion = Convert.ToInt32(versionSegments[1]); //Major Version UgiiMinorVersion = Convert.ToInt32(versionSegments[2]); //Minor Version } private void AlignCode(string nxVersionNo, string tempPatchText, string nxVerString, string nxCompBaseRelVer) { //NX Version zerlegen string[] versionSegments = new string[6]; string[] temp = new string[5]; temp = SeperateVersionCode(nxVersionNo); for (int i = 0; i < 5; i++) { versionSegments[i] = temp[i]; } //Patch Text zerlegen versionSegments[5] = SeperatePatchText(tempPatchText); //Werte zuordnen if (Convert.ToInt32(versionSegments[1]) <= 12) { NXpatch = String.Concat(versionSegments[0], " ", versionSegments[1], ".", versionSegments[2], ".", versionSegments[3], ".", versionSegments[4], " ", versionSegments[5]); //NX Patch NXversion = String.Concat(versionSegments[0], " ", versionSegments[1], ".", versionSegments[2], ".", versionSegments[3], ".", versionSegments[4]); //NX Version MaintenanceRelease = String.Concat(versionSegments[1], ".", versionSegments[2], ".", versionSegments[3], ".", versionSegments[4]); //Maintenance Release UgiiProductName = versionSegments[0]; //Produkt Name UgiiMajorVersion = Convert.ToInt32(versionSegments[1]); //Major Version UgiiMinorVersion = Convert.ToInt32(versionSegments[2]); //Minor Version UgiiSubminorVersion = Convert.ToInt32(versionSegments[3]); //Subminor Version NXphase = Convert.ToInt32(versionSegments[4]); //NX Phase MaintenancePack = versionSegments[5]; //Maintenance Pack MaintenancePackNumber = Convert.ToInt32(versionSegments[5].Replace("MP", "")); NxVersionString = String.Concat("V", (Convert.ToInt32(versionSegments[1]) + 18).ToString(), ".", versionSegments[2], ".", versionSegments[3], ".", versionSegments[4]); //NX Version String NxMajorVersionString = String.Concat("V", (Convert.ToInt32(versionSegments[1]) + 18).ToString()); //Major Version String NxMinorVersionString = versionSegments[2].ToString(); //Minor Version String NxSubminorVersionString = versionSegments[3].ToString(); //Subminor Version String NxPhaseString = versionSegments[4].ToString(); //NX Phase String UgiiFullVersion = String.Concat("v", versionSegments[1], ".", versionSegments[2], ".", versionSegments[3], ".", versionSegments[4]); //NX Full Version UgiiVersion = String.Concat("v", versionSegments[1]); PostNX12 = false; } else { NXpatch = String.Concat(versionSegments[0], " ", versionSegments[1], ".", versionSegments[3], ".", versionSegments[4], ".", versionSegments[2], " ", versionSegments[5]); //NX Patch NXversion = String.Concat(versionSegments[0], " ", versionSegments[1]); //NX Version MaintenanceRelease = String.Concat(versionSegments[1], ".", versionSegments[2]); //Maintenance Release UgiiProductName = versionSegments[0]; //Produkt Name UgiiMajorVersion = Convert.ToInt32(versionSegments[1]); //Major Version UgiiMinorVersion = Convert.ToInt32(versionSegments[3]); //Minor Version UgiiSubminorVersion = Convert.ToInt32(versionSegments[4]); //Subminor Version NXphase = Convert.ToInt32(versionSegments[2]); //NX Phase MaintenancePack = versionSegments[5]; //Maintenance Pack MaintenancePackNumber = Convert.ToInt32(versionSegments[5].Replace("MP", "")); NxVersionString = nxVerString; //NX Version String NxMajorVersionString = String.Concat("V", (Convert.ToInt32(versionSegments[1])).ToString()); //Major Version String NxMinorVersionString = versionSegments[2].ToString(); //Minor Version String NxSubminorVersionString = versionSegments[3].ToString(); //Subminor Version String NxPhaseString = versionSegments[4].ToString(); //NX Phase String UgiiFullVersion = String.Concat("v", versionSegments[1], ".", versionSegments[3], ".", versionSegments[4], ".", versionSegments[2]); //NX Full Version UgiiVersion = String.Concat("v", versionSegments[1]); NxCompatibleBaseReleaseVersion = nxCompBaseRelVer; PostNX12 = true; } } private void AlignCode(string ugiiProductName, int majorVersion, int minorVersion, int subminorVersion, int phase, int mp) { //Werte zuordnen NXpatch = String.Concat(ugiiProductName, " ", majorVersion, ".", minorVersion, ".", subminorVersion, ".", phase, " MP", mp); //NX Patch NXversion = String.Concat(ugiiProductName, " ", majorVersion, ".", minorVersion, ".", subminorVersion, ".", phase); //NX Version MaintenanceRelease = String.Concat(majorVersion, ".", minorVersion, ".", subminorVersion, ".", phase); //Maintenance Release UgiiProductName = ugiiProductName; //Produkt Name UgiiMajorVersion = majorVersion; //Major Version UgiiMinorVersion = minorVersion; //Minor Version UgiiSubminorVersion = subminorVersion; //Subminor Version NXphase = phase; //NX Phase MaintenancePack = String.Concat("MP", mp); //Maintenance Pack MaintenancePackNumber = mp; NxVersionString = String.Concat("V", (Convert.ToInt32(majorVersion) + 18).ToString(), ".", minorVersion, ".", subminorVersion, ".", phase); //NX Version String NxMajorVersionString = String.Concat("V", (Convert.ToInt32(majorVersion) + 18).ToString()); //Major Version String NxMinorVersionString = minorVersion.ToString(); //Minor Version String NxSubminorVersionString = subminorVersion.ToString(); //Subminor Version String NxPhaseString = phase.ToString(); //NX Phase String UgiiFullVersion = String.Concat("v", majorVersion, ".", minorVersion, ".", subminorVersion, ".", phase); //NX Full Version UgiiVersion = String.Concat("v", majorVersion); PostNX12 = !(UgiiMajorVersion <= 12); } private string[] SeperateVersionCode(string versionNumber) { //Wert auflösen und in den Variablen ablegen if (versionNumber == "\n\r" || versionNumber == null) { versionNumber = "NX 00.0.0.00 MP0"; //Wenn kein Wert zurückgeliefert wird, dann mit Null vorbelegen } if (versionNumber.EndsWith("\r\n")) { versionNumber = versionNumber.Replace("\r\n", ""); //Zeilenvorschub und Wagenrücklauf entfernen } else if (versionNumber.EndsWith("\n\r")) { versionNumber = versionNumber.Replace("\n\r", ""); //Zeilenvorschub und Wagenrücklauf entfernen } string[] versionSegments = new string[6]; if (versionNumber.Contains("MP")) { versionSegments[5] = versionNumber.Remove(0, versionNumber.IndexOf("MP")); versionNumber = versionNumber.Remove(versionNumber.IndexOf("MP") - 1); //Wenn ' MP' vorkommt, dann abschneiden } else { versionSegments[5] = "MP0"; } versionSegments[0] = versionNumber.Remove(versionNumber.IndexOf(" ")); //Produktnamen zuordnen. Z.B.: NX of NX 10.0.3.5 versionNumber = versionNumber.Remove(0, versionNumber.IndexOf(" ") + 1); //Den Produktnamen entfernen //Die einzelnen Segmente herauslösen string[] tempVersionSegments = versionNumber.Split(new Char[] { '.' }); if (tempVersionSegments.Length != 4) { if (tempVersionSegments.Length == 3) { //NX Phase fehlt versionSegments[1] = tempVersionSegments[0]; versionSegments[2] = tempVersionSegments[1]; versionSegments[3] = tempVersionSegments[2]; versionSegments[4] = "0"; } else if (tempVersionSegments.Length == 2) { //Sub Minor Version und NX Phase fehlen versionSegments[1] = tempVersionSegments[0]; versionSegments[2] = tempVersionSegments[1]; versionSegments[3] = "0"; versionSegments[4] = "0"; } else if (tempVersionSegments.Length == 1) { //Minor Version, Sub Minor Version und NX Phase fehlen versionSegments[1] = tempVersionSegments[0]; versionSegments[2] = "0"; versionSegments[3] = "0"; versionSegments[4] = "0"; } else { //Major Version, Minor Version, Sub Minor Version und NX Phase fehlen versionSegments[1] = "0"; versionSegments[2] = "0"; versionSegments[3] = "0"; versionSegments[4] = "0"; } } else { versionSegments[1] = tempVersionSegments[0]; versionSegments[2] = tempVersionSegments[1]; versionSegments[3] = tempVersionSegments[2]; versionSegments[4] = tempVersionSegments[3]; } return versionSegments; } private string SeperatePatchText(string patchText) { if (patchText.Contains("MP")) { patchText = patchText.Remove(0, patchText.IndexOf("MP")); //Alles vor MP abschneiden if (patchText.Contains(",")) { patchText = patchText.Remove(patchText.IndexOf(",")); } return patchText; } else { return "MP0"; //Es wurde kein gültiger Text gefunden, darum einen Wert zuweisen } } private NxVersion AssignVersion() { NxVersion nxVersion = new NxVersion(); if (UgiiMajorVersion <= 12) { nxVersion.NXpatch = NXpatch; //NX Patch. E.g.: NX 10.0.3.5 MP4 nxVersion.NXversion = NXversion; //NX Version. E.g.: NX 10.0.3.5 or 1973 nxVersion.MaintenanceRelease = MaintenanceRelease; //Maintenance Release. E.g.: 10.0.3.5 of NX 10.0.3.5 MP4 or 1973.3701 of 1973.0.0.3701 nxVersion.UgiiProductName = UgiiProductName; //UGII_PRODUCT_NAME. E.g.: NX of NX 10.0.3.5 or NX of 1973.3701 nxVersion.UgiiMajorVersion = UgiiMajorVersion; //UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 or 1973 of 1973.0.03701 nxVersion.UgiiMinorVersion = UgiiMinorVersion; //UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 or 0 of 1973.0.0.3701 nxVersion.UgiiSubminorVersion = UgiiSubminorVersion; //UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 or 0 of 1973.0.0.3701 nxVersion.NXphase = NXphase; //NX Phase. E.g.: 5 of NX 10.0.3.5 or 3701 of 1973.0.0.3701 nxVersion.MaintenancePack = MaintenancePack; //Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 nxVersion.MaintenancePackNumber = MaintenancePackNumber; //Maintenance Pack Number. E.g.: 4 of NX 10.0.3.5 MP4 nxVersion.NxVersionString = NxVersionString; //NX_VERSION_STRING. E.g.: V28.0.3.5 instead of NX 10.0.3.5 MP4 nxVersion.NxMajorVersionString = NxMajorVersionString; //NX_MAJOR_STRING. E.g.: V28 of V28.0.3.5 nxVersion.NxMinorVersionString = NxMinorVersionString; //NX_MINOR_STRING. E.g.: 0 of V28.0.3.5 nxVersion.NxSubminorVersionString = NxSubminorVersionString; //NX_SUBMINOR_STRING. E.g.: 3 of V28.0.3.5 nxVersion.NxPhaseString = NxPhaseString; //NX_PHASE_STRING. E.g.: 5 of V28.0.3.5 nxVersion.UgiiFullVersion = UgiiFullVersion; //UGII_FULL_VERSION. E.g.: v10.0.3.5 instead of NX 10.0.3.5 or v1973.3701 nxVersion.UgiiVersion = UgiiVersion; //UGII_VERSION. E.g.: v10 of v10.0.3.5 nxVersion.PostNX12 = PostNX12; } else { nxVersion.NXpatch = NXpatch; //NX Patch. E.g.: NX 10.0.3.5 MP4 nxVersion.NXversion = NXversion; //NX Version. E.g.: NX 10.0.3.5 nxVersion.MaintenanceRelease = MaintenanceRelease; //Maintenance Release. E.g.: 10.0.3.5 of NX 10.0.3.5 MP4 nxVersion.UgiiProductName = UgiiProductName; //UGII_PRODUCT_NAME. E.g.: NX of NX 10.0.3.5 nxVersion.UgiiMajorVersion = UgiiMajorVersion; //UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 nxVersion.UgiiMinorVersion = UgiiMinorVersion; //UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 nxVersion.UgiiSubminorVersion = UgiiSubminorVersion; //UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 nxVersion.NXphase = NXphase; //NX Phase. E.g.: 5 of NX 10.0.3. nxVersion.MaintenancePack = MaintenancePack; //Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 nxVersion.MaintenancePackNumber = MaintenancePackNumber; //Maintenance Pack Number. E.g.: 4 of NX 10.0.3.5 MP4 nxVersion.NxVersionString = NxVersionString; //NX_VERSION_STRING. E.g.: V28.0.3.5 instead of NX 10.0.3.5 MP4 nxVersion.NxMajorVersionString = NxMajorVersionString; //NX_MAJOR_STRING. E.g.: V28 of V28.0.3.5 nxVersion.NxMinorVersionString = NxMinorVersionString; //NX_MINOR_STRING. E.g.: 0 of V28.0.3.5 nxVersion.NxSubminorVersionString = NxSubminorVersionString; //NX_SUBMINOR_STRING. E.g.: 3 of V28.0.3.5 nxVersion.NxPhaseString = NxPhaseString; //NX_PHASE_STRING. E.g.: 5 of V28.0.3.5 nxVersion.UgiiFullVersion = UgiiFullVersion; //UGII_FULL_VERSION. E.g.: v10.0.3.5 instead of NX 10.0.3.5 nxVersion.UgiiVersion = UgiiVersion; //UGII_VERSION. E.g.: v10 of v10.0.3.5 nxVersion.NxCompatibleBaseReleaseVersion = NxCompatibleBaseReleaseVersion; //NX_COMPATIBLE_BASE_RELEASE_VERSION. E.g.: NX 1953 nxVersion.PostNX12 = PostNX12; } return nxVersion; } private NxVersion AssignVersionSegments(string[] versionSegments) { NxVersion nxVersion = new NxVersion(); // NX_VERSION. E.g.: NX 10.0.3.5 nxVersion.NXversion = versionSegments[0] + " " + versionSegments[1] + "." + versionSegments[2] + "." + versionSegments[3] + "." + versionSegments[4]; NXversion = nxVersion.NXversion; // NX_PHASE. E.g.: 5 of NX 10.0.3.5 nxVersion.NXphase = Convert.ToInt16(versionSegments[4]); NXphase = nxVersion.NXphase; // NX_PATCH. E.g.: NX 10.0.3.5 MP4 nxVersion.NXpatch = nxVersion.NXversion + " " + versionSegments[5]; NXpatch = nxVersion.NXpatch; // UGII_PRODUCT_NAME. E.g.: NX of NX 10.0.3.5 nxVersion.UgiiProductName = versionSegments[0]; UgiiProductName = nxVersion.UgiiProductName; // UGII_VERSION. E.g.: v10 of NX 10.0.3.5 nxVersion.UgiiVersion = "v" + versionSegments[1]; UgiiVersion = nxVersion.UgiiVersion; // UGII_FULL_VERSION. E.g.: v10.0.3.5 nxVersion.UgiiFullVersion = "v" + versionSegments[1] + "." + versionSegments[2] + "." + versionSegments[3] + "." + versionSegments[4]; UgiiFullVersion = nxVersion.UgiiFullVersion; // UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 nxVersion.UgiiMajorVersion = Convert.ToInt16(versionSegments[1]); UgiiMajorVersion = nxVersion.UgiiMajorVersion; // UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 nxVersion.UgiiMinorVersion = Convert.ToInt16(versionSegments[2]); UgiiMinorVersion = nxVersion.UgiiMinorVersion; // UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 nxVersion.UgiiSubminorVersion = Convert.ToInt16(versionSegments[3]); UgiiSubminorVersion = nxVersion.UgiiSubminorVersion; // NX_VERSION_STRING. E.g.: V28.0.3.5 instead of NX 10.0.3.5 MP4 nxVersion.NxVersionString = "V" + (Convert.ToInt16(versionSegments[1]) + 18).ToString() + "." + versionSegments[2] + "." + versionSegments[3] + "." + versionSegments[4]; NxVersionString = nxVersion.NxVersionString; // NX_MAJOR_STRING. E.g.: V28 of V28.0.3.5 nxVersion.NxMajorVersionString = "V" + (Convert.ToInt16(versionSegments[1]) + 18).ToString(); NxMajorVersionString = nxVersion.NxMajorVersionString; // NX_MINOR_STRING. E.g.: 0 of V28.0.3.5 nxVersion.NxMinorVersionString = versionSegments[2]; NxMinorVersionString = nxVersion.NxMinorVersionString; // NX_SUBMINOR_STRING. E.g.: 3 of V28.0.3.5 nxVersion.NxSubminorVersionString = versionSegments[3]; NxSubminorVersionString = nxVersion.NxSubminorVersionString; // NX_PHASE_STRING. E.g.: 5 of V28.0.3.5 nxVersion.NxPhaseString = versionSegments[4]; NxPhaseString = nxVersion.NxPhaseString; // Maintenance Release. E.g.: 10.0.3.5 of NX 10.0.3.5 MP4 nxVersion.MaintenanceRelease = versionSegments[1] + "." + versionSegments[2] + "." + versionSegments[3] + "." + versionSegments[4]; MaintenanceRelease = nxVersion.MaintenanceRelease; // Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 nxVersion.MaintenancePack = versionSegments[5]; MaintenancePack = nxVersion.MaintenancePack; // Maintenance Pack Number. E.g.: 4 of NX 10.0.3.5 MP4 nxVersion.MaintenancePackNumber = Convert.ToInt16(nxVersion.MaintenancePack.Remove(0, nxVersion.MaintenancePack.IndexOf("MP") + 2)); MaintenancePackNumber = nxVersion.MaintenancePackNumber; // Post NX12. E.g.: true nxVersion.PostNX12 = PostNX12; return nxVersion; } #endregion #region Common Public Methodes /// /// Converts a NxPatch string to NxVersion /// /// A valid NxPatch. E.g.: NX 10.0.3.5 MP4 /// public NxVersion ConvertStringPatchToNxVersionPatch(string nxPatch) { return AssignVersionSegments(SeperateVersionCode(nxPatch)); } /// /// Assign values to a NX Version. /// /// A valid UGII_BASE_DIR. /// A full defined NX Version. public NxVersion GetNxVersion(string ugii_base_dir) { NxVersion nxVersion = new NxVersion(); string tempVersion = ""; string tempPatchText = ""; if (Directory.Exists(ugii_base_dir)) { tempVersion = ReadProcessOutput(ugii_base_dir, "-n"); //Prozess mit env_print.exe -n aufrufen tempPatchText = ReadProcessOutput(ugii_base_dir, "-m"); //Prozess mit env_print.exe -m aufrufen string nxVerString = ReadNxEnvValues(ugii_base_dir + "\\UGII\\", "-v"); nxVerString = nxVerString.Remove(nxVerString.IndexOf("\r")); string nxCompBaseRelVer = ReadNxEnvValues(ugii_base_dir + "\\UGII\\", "-f"); if (!String.IsNullOrEmpty(nxCompBaseRelVer)) { nxCompBaseRelVer = nxCompBaseRelVer.Remove(nxCompBaseRelVer.IndexOf("\r")); } //Wert auflösen und in den Variablen ablegen AlignCode(tempVersion, tempPatchText, nxVerString, nxCompBaseRelVer); return AssignVersion(); //Werte zuordnen } else { return null; //Wenn 'ugii_base_dir' nicht existiert, dann 'null' zurückgeben } } /// /// Assign values to a NX Version. /// /// A valid product name. E.g.: NX /// A valid UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 /// A valid UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 /// A full defined NX Version. public NxVersion GetNxVersion(string ugiiProductName, int majorVersion, int minorVersion) { NxVersion nxVersion = new NxVersion(); //Wert auflösen und in den Variablen ablegen AlignCode(ugiiProductName, majorVersion, minorVersion, 0, 0, 0); return AssignVersion(); //Werte zuordnen } /// /// Assign values to a NX Version. /// /// A valid product name. E.g.: NX /// A valid UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 /// A valid UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 /// A valid UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 /// A full defined NX Version. public NxVersion GetNxVersion(string ugiiProductName, int majorVersion, int minorVersion, int subminorVersion) { NxVersion nxVersion = new NxVersion(); //Wert auflösen und in den Variablen ablegen AlignCode(ugiiProductName, majorVersion, minorVersion, subminorVersion, 0, 0); return AssignVersion(); //Werte zuordnen } /// /// Assign values to a NX Version. /// /// A valid product name. E.g.: NX /// A valid UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 /// A valid UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 /// A valid UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 /// A valid NX Phase. E.g.: 5 of NX 10.0.3.5 /// A valid Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 /// A full defined NX Version. public NxVersion GetNxVersion(string ugiiProductName, int majorVersion, int minorVersion, int subminorVersion, int phase, int mp) { NxVersion nxVersion = new NxVersion(); //Wert auflösen und in den Variablen ablegen AlignCode(ugiiProductName, majorVersion, minorVersion, subminorVersion, phase, mp); return AssignVersion(); //Werte zuordnen } #endregion #region Compare /// /// Compares two NX-Versions. /// /// A valid NX-Version. /// 0 = equal, 1 = first version newer, 2 = second version newer, -1 = An error is happened. public int Compare(NxVersion version) { return Compare(this, version); } /// /// Compares two NX-Versions. /// /// A valid NX Version. /// A valid NX Version. /// 0 = equal, 1 = first version newer, 2 = second version newer, -1 = An error is happened. public int Compare(NxVersion version1, NxVersion version2) { if (version1.PostNX12 & version2.PostNX12) { return ComparePostNX12(version1, version2); } if (!version1.PostNX12 & !version2.PostNX12) { return CompareUpToNX12(version1, version2); } if ((version1.PostNX12 & !version2.PostNX12) || (!version1.PostNX12 & version2.PostNX12)) { return CompareDiffVersions(version1, version2); } return -1; } /// /// Compares two NX-Versions. /// /// A valid product name. E.g.: NX /// A valid UGII_MAJOR_VERSION. E.g.: 10 of NX 10.0.3.5 /// A valid UGII_MINOR_VERSION. E.g.: 0 of NX 10.0.3.5 /// A valid UGII_SUBMINOR_VERSION. E.g.: 3 of NX 10.0.3.5 /// A valid NX Phase. E.g.: 5 of NX 10.0.3.5 /// A valid Maintenance Pack. E.g.: MP4 of NX 10.0.3.5 MP4 /// 0 = equal, 1 = first version newer, 2 = second version newer, -1 = An error is happened. public int Compare(string ugiiProductName, int majorVersion, int minorVersion, int subminorVersion, int phase, int mp) { NxVersion nxVersion = new NxVersion(); nxVersion.UgiiProductName = ugiiProductName; nxVersion.UgiiMajorVersion = majorVersion; nxVersion.UgiiMinorVersion = minorVersion; nxVersion.UgiiSubminorVersion = subminorVersion; nxVersion.NXphase = phase; nxVersion.MaintenancePackNumber = mp; //NX-Version vergleichen return Compare(this, nxVersion); } private int CompareUpToNX12(NxVersion version1, NxVersion version2) { //Nummer setzen wenn noch nicht geschehen if (!String.IsNullOrEmpty(version2.MaintenancePack)) { if (version2.MaintenancePackNumber != Convert.ToInt32(version2.MaintenancePack.Remove(0, 2))) { version2.MaintenancePackNumber = Convert.ToInt32(version2.MaintenancePack.Remove(0, 2)); } } //if (version1.NXpatch == version2.NXpatch) if (version1.UgiiMajorVersion == version2.UgiiMajorVersion & version1.UgiiMinorVersion == version2.UgiiMinorVersion & version1.UgiiSubminorVersion == version2.UgiiSubminorVersion & version1.NXphase == version2.NXphase & version1.MaintenancePackNumber == version2.MaintenancePackNumber) { return 0; //Versionen gleich } if (version1.UgiiMajorVersion < version2.UgiiMajorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMajorVersion > version2.UgiiMajorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiMinorVersion < version2.UgiiMinorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMinorVersion > version2.UgiiMinorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiSubminorVersion < version2.UgiiSubminorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiSubminorVersion > version2.UgiiSubminorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.NXphase < version2.NXphase) { return 2; //Version 1 ist älter als Version 2 } if (version1.NXphase > version2.NXphase) { return 1; //Version 1 ist neuer als Version 2 } if (version1.MaintenancePackNumber < version2.MaintenancePackNumber) { return 2; //Version 1 ist älter als Version 2 } if (version1.MaintenancePackNumber > version2.MaintenancePackNumber) { return 1; //Version 1 ist neuer als Version 2 } return -1; //Fehler passiert } private int ComparePostNX12(NxVersion version1, NxVersion version2) { if (version1.UgiiMajorVersion == version2.UgiiMajorVersion & version1.UgiiMinorVersion == version2.UgiiMinorVersion) { return 0; //Versionen gleich } if (version1.UgiiMajorVersion < version2.UgiiMajorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMajorVersion > version2.UgiiMajorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiMinorVersion < version2.UgiiMinorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMinorVersion > version2.UgiiMinorVersion) { return 1; //Version 1 ist neuer als Version 2 } return -1; //Fehler passiert } private int CompareDiffVersions(NxVersion version1, NxVersion version2) { if (version1.UgiiMajorVersion > version2.UgiiMajorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiMajorVersion < version2.UgiiMajorVersion) { return 2; //Version 1 ist neuer als Version 2 } return -1; //Fehler passiert } private int CompareMethode(NxVersion version) { return CompareMethode(this, version); } private int CompareMethode(NxVersion version1, NxVersion version2) { if (version1.NXpatch == version2.NXpatch) { return 0; //Versionen gleich } if (version1.UgiiMajorVersion < version2.UgiiMajorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMajorVersion > version2.UgiiMajorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiMinorVersion < version2.UgiiMinorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiMinorVersion > version2.UgiiMinorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.UgiiSubminorVersion < version2.UgiiSubminorVersion) { return 2; //Version 1 ist älter als Version 2 } if (version1.UgiiSubminorVersion > version2.UgiiSubminorVersion) { return 1; //Version 1 ist neuer als Version 2 } if (version1.NXphase < version2.NXphase) { return 2; //Version 1 ist älter als Version 2 } if (version1.NXphase > version2.NXphase) { return 1; //Version 1 ist neuer als Version 2 } if (version1.MaintenancePackNumber < version2.MaintenancePackNumber) { return 2; //Version 1 ist älter als Version 2 } if (version1.MaintenancePackNumber > version2.MaintenancePackNumber) { return 1; //Version 1 ist neuer als Version 2 } return -1; //Fehler passiert } private int CompareMethode(string ugiiProductName, int majorVersion, int minorVersion, int subminorVersion, int phase, int mp) { //NxVersion nxVersion = new NxVersion(); NxVersion nxVersion = GetNxVersion(ugiiProductName, majorVersion, minorVersion, subminorVersion, phase, mp); //NX-Version vergleichen return CompareMethode(this, nxVersion); } #endregion } #region Exception class NoNXversionException : ApplicationException { public NoNXversionException() { } public NoNXversionException(string message) : base(message) { } public NoNXversionException(string message, Exception inner) : base(message, inner) { } } class NoEnvPrintExeException : ApplicationException { public NoEnvPrintExeException() { } public NoEnvPrintExeException(string message) : base(message) { } public NoEnvPrintExeException(string message, Exception inner) : base(message, inner) { } } class NoLibPatchDllException : ApplicationException { public NoLibPatchDllException() { } public NoLibPatchDllException(string message) : base(message) { } public NoLibPatchDllException(string message, Exception inner) : base(message, inner) { } } class NoLibSysDllException : ApplicationException { public NoLibSysDllException() { } public NoLibSysDllException(string message) : base(message) { } public NoLibSysDllException(string message, Exception inner) : base(message, inner) { } } #endregion }