Vielen Dank an nairolf für die Bereitstellung der schönen Methode um die EPLAN Version zu ermitteln. Funktioniert in API & Scripting. Man kann das dann z.B. so verwenden:
if (EplanApplicationInfo.GetActiveEplanVersion() >= 270) { FlyToTheRainbowIn27(); }
Die Methode:
using System; using System.Diagnostics; using System.IO; using Eplan.EplApi.Base; namespace Suplanus.Sepla.Application { public class EplanApplicationInfo { public static int GetActiveEplanVersion() { string eplanVersion = "0"; //default value = 0 to ensure, that EPLAN-version is correctly recognized //try new variable $(EPLAN_VERSION) first, if not valid, no possibility to get active get active EPLAN-version if (PathMap.SubstitutePath("$(EPLAN_VERSION)") != "$(EPLAN_VERSION)") { eplanVersion = PathMap.SubstitutePath("$(EPLAN_VERSION)"); } else { //try different method to get version of executing eplan, in case the actual version doesn't support $(EPLAN_VERSION) string dllFilename = Path.Combine(PathMap.SubstitutePath("$(BIN)"), "Eplan.EplApi.Baseu.dll"); FileInfo fileInfo = new FileInfo(dllFilename); if (fileInfo.Exists) { var versionInfo = FileVersionInfo.GetVersionInfo(dllFilename); //return main-version-infos (without build number) if (versionInfo.ProductVersion.Length >= 5) { eplanVersion = versionInfo.ProductVersion.Substring(0, 5); } } } if (eplanVersion == "0" || eplanVersion == "$(EPLAN_VERSION)") { MultiLangString multiLangErrorText = new MultiLangString(); multiLangErrorText.AddString(ISOCode.Language.L_de_DE, "Die aktuelle EPLAN-Version konnte nicht ermittelt werden."); multiLangErrorText.AddString(ISOCode.Language.L_en_US, "Unable to get actual EPLAN-version."); ISOCode.Language guiLanguage = new Languages().GuiLanguage.GetNumber(); string errorText = multiLangErrorText.GetStringToDisplay(guiLanguage); if (String.IsNullOrEmpty(errorText)) { //if actual GUI-language is not defined in multi-language-string, use en_US-text-version errorText = multiLangErrorText.GetStringToDisplay(ISOCode.Language.L_en_US); } new BaseException(errorText, MessageLevel.Warning).FixMessage(); eplanVersion = "0"; } return Convert.ToInt32(eplanVersion.Replace(".", string.Empty)); } } }
Findet Ihr auch hier auf GitHub.
Hallo,
Zeile 17 in der Methode verursacht in Plattform 2022 einen Ausnahmefehler (Version 2.5 bis 2.9 keine Probleme). Wenn ich die auskommentiere, kommt kein Fehler, allerdings auch keine Version.
Wenn ich die Methode so ändere, dass immer die DLL zur Versionsermittlung herangezogen wird, funktioniert die Methode wieder in Plattform 2022 (else-Zweig ab Zeile 19).
Ich habe den Code angepasst (Zeile 50):
`ToInt16()` muss ab EPLAN 2022 `ToInt32()` sein, da die komplette Versionsnummer größer ist. Nun sollte es gehen.
Kann ich bestätigen. Oben stehender Code funktioniert bei mir jetzt in den Version 2.5/2.6/2.7/2.9/2022.
Bei Version 2022 kommt jetzt auch die vollständige Versionsinfo (202203). Mit meiner Anpassung kamen nur die ersten 4 Stellen (2022).
Kurios nur dass Version 2022 bereits zufrieden war, wenn ich nur Zeile 17 auskommentiert hatte. Letztlich steht ja in der If-Bedingung in Zeile 15 derselbe Befehl. Hier haben mich die Systemmeldungen von ePLAN wohl in die Irre geführt.
Vielen Dank!