Es ist ein Problem das EPLAN leider seit Jahren nicht in den Griff bekommt.
Das Projektaustauschformat ZW1 enthält keine direkte Information welche Projektversion das Projekt hat. Somit weiß man erst beim Import des Projektes ob man die richtige EPLAN Version geöffnet hat.
Hier muss man oft sehr Zeitintensiv die verschiedenen Versionen der Software öffnen/schließen.
Ich habe ein kleines Programm geschrieben, welches die ZW1-Datei prüft und die EPLAN Version anzeigt. Zusätzlich kann in einer INI-Datei hinterlegt werden, welche Versionen auf dem Rechner installiert sind. Falls die passende Version nicht installiert ist wird diese Information angezeigt:
Beispielaufbau der Settings.ini:
1.9.11 C:\Program Files (x86)\EPLAN\Electric P8\1.9.11\BIN\W3u.exe
2.0.10 C:\Program Files (x86)\EPLAN\Electric P8\2.0.10\BIN\W3u.exe
2.1.6 C:\Program Files (x86)\EPLAN\Electric P8\2.1.6\Bin\W3u.exe
Wert und Eigenschaft werden durch TABSTOP getrennt.
Ist die EPLAN Version auf dem Rechner vorhanden, wird diese gleich geöffnet. Falls nicht wird die Versionsnummer angezeigt. Bitte achtet darauf die INI-Datei zu ändern. Ich habe z.B. ein Windows 7 64bit, hier ist der Pfad zu EPLAN ein anderer als Beispielsweise unter Windows XP. Hier wird sonst ein Fehler ausgegeben.
Ich habe das Programm EplanGetProjectVersion als Standardprogramm unter Windows eingestellt. Dadurch kann ich mit einem einfachen Doppelklick die Datei öffnen bzw. die Version anzeigen lassen:
EplanGetProjectVersion 1.0.0 (2895 Downloads )
Projekt auf GitHub
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Xml;
namespace EplanGetProjectVersion
{
internal class Program
{
private static void Main(string[] args)
{
try
{
string ProjectFile = args[0];
const string QUOTE = "\"";
const string NEWLINE = "\n";
string IniFile = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\Settings.ini";
string SevenZip = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @"\7za.exe";
string TempDir = Path.GetTempPath();
string TempFile = TempDir + "ProjectInfo.xml";
string clArg = "e " + QUOTE + ProjectFile + QUOTE + " -o" + QUOTE + TempDir + QUOTE +
" ProjectInfo.xml -r";
Console.WriteLine(
"==> INI file: " + IniFile + NEWLINE +
"==> 7zip location: " + SevenZip + NEWLINE +
"==> Project: " + ProjectFile + NEWLINE +
"==> Temp directory: " + TempDir + NEWLINE +
"==> Temp file: " + TempFile +
"==> Argument: " + clArg
);
Console.WriteLine("<<< Search for 'ProjectInfo.xml'... >>>");
// Delete tempfile
if (File.Exists(TempFile))
{
File.Delete(TempFile);
Console.WriteLine("==> TempFile deleted.");
}
// Unzip
Console.WriteLine("<<< Arguments >>>");
Process t7zip = new Process();
t7zip.StartInfo.FileName = SevenZip;
t7zip.StartInfo.Arguments = clArg;
t7zip.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
t7zip.StartInfo.RedirectStandardOutput = true;
t7zip.StartInfo.UseShellExecute = false;
t7zip.EnableRaisingEvents = true;
t7zip.Start();
Console.WriteLine(t7zip.StandardOutput.ReadToEnd());
// Check ProjectInfo.xml
if (!File.Exists(TempFile))
{
Console.WriteLine("==> No 'ProjectInfo.xml' found :(");
Console.ReadLine();
return;
}
// Search for XML property
Console.WriteLine("<<< Search for last used version... >>>");
string LastVersion = ReadXml(TempFile, 10043);
Console.WriteLine("==> " + LastVersion);
// EPLAN start
string[] Ini = File.ReadAllLines(IniFile);
foreach (string s in Ini)
{
string[] setting = s.Split('\t');
if (setting[0].Equals(LastVersion))
{
Process.Start(setting[1]);
Console.WriteLine("==> EPLAN " + LastVersion + " started...");
return;
}
}
// Wait
Console.WriteLine("==> No EPLAN " + LastVersion + " found in settings file :(");
Console.ReadLine();
return;
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex);
Console.ReadLine();
}
}
private static string ReadXml(string filename, int ID)
{
string strLastVersion;
try
{
XmlTextReader reader = new XmlTextReader(filename);
while (reader.Read())
{
if (reader.HasAttributes)
{
while (reader.MoveToNextAttribute())
{
if (reader.Name == "id")
{
if (reader.Value == ID.ToString())
{
strLastVersion = reader.ReadString();
reader.Close();
return strLastVersion;
}
}
}
}
}
}
catch (Exception ex)
{
return ex.Message;
}
return "Property 10043 not found :(";
}
} // Class
} // Namespace
Hallo,
Tolles Tool, vielen dank für das programmieren und zur verfügung stellen.
Ich hätte noch 2 Punkte die ich als Erweiterung deines Tools gerne mitteilen möchte und mich über dessen Umsetzung sehr freuen würde, soweit es natürlich machbar ist.
– Wäre es möglich aus der XML Datei auch die Variable “10044”, letzte benutzte Versionsnummer , heraus zu lesen und auch mit anzuzeigen ??
-Ich würde es auch gut finden wenn nicht standardmässig die Datei geöffnet wird wenn die entsprechende Eplanversion auf dem PC vorliegt, sondern erst nach einer kurzen Abfrage mit Bestätigung.
Grund ist dass man dann auch schnell mehrere Dateien auf die Version hin checken könnte ohne sie jedesmal zu öffnen.
Nochmals vielen Dank
Gruss
Kei
Hallo Kei,
wäre möglich, mir fehlt aber die Zeit. Eigentlich ist schon alles im Projekt enthalten, einfach Funktion ReadXml mit der ID aufrufen und anhängen.
Für nur eine Sicherungsdatei funktioniert dies super.
Ich bekomme aber manchmal per Mail (mehrere vom Eplan Programm gesplittete Sicherungsdateien/Mails). Diese funktionieren dann nicht mit dem Programm (wenn ich Test.000.zw1 auswähle). Gibt es da ein Workaround ?
Gruß, André
Ist leider so nicht vorgesehen. Da es sich um Zip-Archive handelt (zw1 ist nur ne Zip-Datei). Könnte man diese zusammenführen.
Hallo bekomme folgende Fehlermeldung beim Start des Programmes:
System.IndexOutOfRangeException: Der Index war außerhalb des Arraybereiches. kannst du mir weiterhelfen?
Gruß
Michael
Ich habe das Tool leider in den aktuellen Versionen nicht getestet.
Hab es auf der Agenda es mal neu zu schreiben :/
Fehlt nur die Zeit.
Hallo, wir haben bei uns gerade das Problem, ePlan bzw. ePlan View startet wie gewünscht jedoch wird der Wiederherstellungsdialog nicht geöffnet, woran könnte das liegen?
MfG
Marco
Könnte mir vorstellen dass sich die Action geändert hat. Welche EPLAN Version?
Es war bei ePlan 2.2 bzw. beim ePlan View, dort hat es bei einem Kollegen auf einmal nicht mehr funktioniert.
Müsste gehen…
Rechteverwaltung oder Lizenz überprüft?
Hast du Systemmeldungen?
so was wie Rechteverwaltung haben wir nicht, auf dem PC sind auch nur diverse Viewer installiert und in der Log-Datei steht auch nichts auffälliges, zuletzt nur der Systemstart und Ende, aber keine Fehlermeldung, obwohl versucht wurde eine ZW1 Datei mit deinem Tool zu öffnen
——- 27.05.2016 07:27:00 Station: NB-2 User: user ——- (System Start Up)
0x17e0 (6338) [S000000] MESSAGE (07:27:00) in module W3Shared: P8 started (App.cpp, line 824)
——- 27.05.2016 07:28:50 Station: NB-2 User: user ——- (Save: System end)
———————————————————————————————————————————-
——- 27.05.2016 07:28:50 Station: NB-2 User: user ——- (System Shut Down)
0x17e0 (6338) [S000000] MESSAGE (07:28:50) in module BaseTypes: P8 closed (BaseTypes.cpp, line 213)
———————————————————————————————————————————-
da hängt sicherlich bei ePlan irgendein Bit quer :roll:
Bist du Dir sicher dass das im Viewer schon funktionierte?
Ich muss das eh mal neuschreiben :/
ja bei dem Kollegen hatte es schon funktioniert nur mit Viewer, jetzt aber auf einmal nicht mehr, bei mir geht es leider gar nicht da kommen nur Fehlermeldungen, entweder es fehlt eine Install.xml (wenn ich die Pfade für den Viewer angegeben habe) oder es wird das normale P8 geöffnet obwohl in der ini der Verweis auf den Viewer Pfad eingetragen ist, das muss irgendwie mit P8 zu tun haben, vielleicht auch mit der Reihenfolge in der die Programme installiert wurden, da P8 standardmäßig mit der zuletzt installierten Version startet….
hier könnte man eigentlich mal ein Ticket eröffnen, damit die das endlich so einrichten das eplan automatisch erkennt in welcher Version das Projekt vorliegt und sollte diese Version vorhanden sein, entsprechend mit dieser öffnen, andernfalls einfach eine Auswahl an vorhandenen Versionen anbieten mit der man öffnen möchte
aber solange es da nichts gibt, lass ich die ini leer um mir nur die Version anzeigen zu lassen, das ist vollkommen ausreichend!
noch ein kleiner Nachtrag, nachdem ich einfach die install xml vom normalen P8 ins Viewer Verzeichnis kopiert habe (diese Datei gab es hier vorher nicht) und in der ini den Pfad zum Viewer angegeben habe, öffnet ePlan zwar P8 und nicht den Viewer aber laut Symbol in der Taskleiste ist es der Viewer,
es wird wohl an der XML liegen bzw. daran das in der Verknüpfung zum Viewer noch der Zusatz /Variant: “View” mit angegeben ist, diesen konnte ich aber bei der ini nicht angeben ohne Fehlermeldungen zu erzeugen,
Ich habe mich mal länger mit dem Thema auseinander gesetzt und daraus ist das Produkt VersionSelector entstanden…
Leider kann ich es nicht kostenlos rausgeben.