EplanGetProjectVersion
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