- Abfrage ob ein Prozess läuft
This commit is contained in:
Hoeglinger Eugen 2022-06-03 11:07:03 +02:00
parent 290c16d329
commit 9bc26dc611

View File

@ -1,426 +1,432 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Resources; using System.Resources;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace Eugen.ESystem namespace Eugen.ESystem
{ {
public class StartStopExtProgram public class StartStopExtProgram
{ {
#region Version und Copyright #region Version und Copyright
// Version und Copyright // Version und Copyright
static string dllName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen static string dllName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen
static string dllVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); static string dllVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); static object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
static string copyright = GenerateCopyright(); static string copyright = GenerateCopyright();
string icon = Application.StartupPath + "\\Info.bmp"; string icon = Application.StartupPath + "\\Info.bmp";
//Assembly Datum und Zeit //Assembly Datum und Zeit
static DateTime value = AssemblyDateTime(); static DateTime value = AssemblyDateTime();
string date = value.ToShortDateString(); string date = value.ToShortDateString();
string time = value.ToLongTimeString(); string time = value.ToLongTimeString();
private static DateTime AssemblyDateTime() private static DateTime AssemblyDateTime()
{ {
var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 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)); 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) //Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original)
return buildDateTime; return buildDateTime;
} }
private static string CurrentYear() private static string CurrentYear()
{ {
DateTime dtn = DateTime.Now; DateTime dtn = DateTime.Now;
return dtn.Year.ToString(); return dtn.Year.ToString();
} }
private static string StartYear() private static string StartYear()
{ {
string startYear = ""; string startYear = "";
if (((AssemblyCopyrightAttribute)attributes[0]).Copyright.Contains("Copyright © ")) if (((AssemblyCopyrightAttribute)attributes[0]).Copyright.Contains("Copyright © "))
{ {
startYear = ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace("Copyright © ", ""); startYear = ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace("Copyright © ", "");
while (startYear.StartsWith(" ")) while (startYear.StartsWith(" "))
{ {
startYear = startYear.Remove(0, 1); startYear = startYear.Remove(0, 1);
} }
startYear = startYear.Remove(startYear.IndexOf(" ")); startYear = startYear.Remove(startYear.IndexOf(" "));
return startYear; return startYear;
} }
else else
{ {
DateTime dtn = DateTime.Now; DateTime dtn = DateTime.Now;
return dtn.Year.ToString(); return dtn.Year.ToString();
} }
} }
private static string GenerateCopyright() private static string GenerateCopyright()
{ {
string startYear = StartYear(); string startYear = StartYear();
string currentYear = CurrentYear(); string currentYear = CurrentYear();
if (startYear == currentYear) if (startYear == currentYear)
{ {
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
} }
else else
{ {
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace(startYear, String.Concat(startYear, "-", currentYear)); return ((AssemblyCopyrightAttribute)attributes[0]).Copyright.Replace(startYear, String.Concat(startYear, "-", currentYear));
} }
} }
#endregion #endregion
#region DLL-Info #region DLL-Info
/// <summary> /// <summary>
/// Contains the name of the program file /// Contains the name of the program file
/// </summary> /// </summary>
public static string DllName { set; get; } public static string DllName { set; get; }
/// <summary> /// <summary>
/// Contains the version of the program file /// Contains the version of the program file
/// </summary> /// </summary>
public static string DllVersion { set; get; } public static string DllVersion { set; get; }
/// <summary> /// <summary>
/// Contains the copyright notice /// Contains the copyright notice
/// </summary> /// </summary>
public static string Copyright { set; get; } public static string Copyright { set; get; }
private static void SetDllInfo() private static void SetDllInfo()
{ {
//Name, Version und Copyright setzen //Name, Version und Copyright setzen
DllName = dllName; DllName = dllName;
DllVersion = dllVersion; DllVersion = dllVersion;
Copyright = copyright; Copyright = copyright;
} }
#endregion #endregion
/// <summary> /// <summary>
/// Starts or stops an external program. /// Starts or stops an external program.
/// </summary> /// </summary>
/// <param name="program">A valid program name with path and extension.</param> /// <param name="program">A valid program name with path and extension.</param>
static StartStopExtProgram() static StartStopExtProgram()
{ {
SetDllInfo(); //Name, Version und Copyright der DLL setzen SetDllInfo(); //Name, Version und Copyright der DLL setzen
} }
/// <summary> /// <summary>
/// Starts or stops an external program. /// Starts or stops an external program.
/// </summary> /// </summary>
/// <param name="program">A valid program name with path and extension.</param> /// <param name="program">A valid program name with path and extension.</param>
public StartStopExtProgram(string program) public StartStopExtProgram(string program)
{ {
SetDllInfo(); //Name, Version und Copyright der DLL setzen SetDllInfo(); //Name, Version und Copyright der DLL setzen
SetBaseValues(program); SetBaseValues(program);
StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName); StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName);
} }
/// <summary> /// <summary>
/// Starts or stops an external program in declared window style. /// Starts or stops an external program in declared window style.
/// </summary> /// </summary>
/// <param name="program">A valid program name with path and extension.</param> /// <param name="program">A valid program name with path and extension.</param>
/// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param> /// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param>
public StartStopExtProgram(string program, bool winStyleMinimized) public StartStopExtProgram(string program, bool winStyleMinimized)
{ {
SetDllInfo(); //Name, Version und Copyright der DLL setzen SetDllInfo(); //Name, Version und Copyright der DLL setzen
SetBaseValues(program, winStyleMinimized); SetBaseValues(program, winStyleMinimized);
StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName); StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName);
} }
/// <summary> /// <summary>
/// Starts or stops an external program in declared window style and transfer parameter. /// Starts or stops an external program in declared window style and transfer parameter.
/// </summary> /// </summary>
/// <param name="program">A valid program name with path and extension.</param> /// <param name="program">A valid program name with path and extension.</param>
/// <param name="arg">A valid transfer parameter.</param> /// <param name="arg">A valid transfer parameter.</param>
/// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param> /// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param>
public StartStopExtProgram(string program, string arg, bool winStyleMinimized) public StartStopExtProgram(string program, string arg, bool winStyleMinimized)
{ {
SetDllInfo(); //Name, Version und Copyright der DLL setzen SetDllInfo(); //Name, Version und Copyright der DLL setzen
SetBaseValues(program, arg, winStyleMinimized); SetBaseValues(program, arg, winStyleMinimized);
StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName); StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName);
} }
/// <summary> /// <summary>
/// Starts or stops an external program in declared window style and transfer parameter. /// Starts or stops an external program in declared window style and transfer parameter.
/// </summary> /// </summary>
/// <param name="programPath">A valid program path.</param> /// <param name="programPath">A valid program path.</param>
/// <param name="programName">A valid program name with extension.</param> /// <param name="programName">A valid program name with extension.</param>
/// <param name="arg">A valid transfer parameter.</param> /// <param name="arg">A valid transfer parameter.</param>
/// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param> /// <param name="winStyleMinimized">Window style: false=visible, true=minimized.</param>
public StartStopExtProgram(string programPath, string programName, string arg, bool winStyleMinimized) public StartStopExtProgram(string programPath, string programName, string arg, bool winStyleMinimized)
{ {
SetDllInfo(); //Name, Version und Copyright der DLL setzen SetDllInfo(); //Name, Version und Copyright der DLL setzen
SetBaseValues(programPath, programName, arg, winStyleMinimized); SetBaseValues(programPath, programName, arg, winStyleMinimized);
StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName); StartStop(String.Concat(ProgramPath, "\\", Program), Arg, WinStyleMinimized, ProcessName);
} }
protected string ProgramPath { set; get; } protected string ProgramPath { set; get; }
protected string Program { set; get; } protected string Program { set; get; }
protected string Arg { set; get; } protected string Arg { set; get; }
protected bool WinStyleMinimized { set; get; } protected bool WinStyleMinimized { set; get; }
protected string ProcessName { set; get; } protected string ProcessName { set; get; }
private void SetBaseValues(string program) private void SetBaseValues(string program)
{ {
if (File.Exists(program)) if (File.Exists(program))
{ {
Program = Path.GetFileName(program); Program = Path.GetFileName(program);
ProgramPath = Path.GetDirectoryName(program); ProgramPath = Path.GetDirectoryName(program);
} }
else else
{ {
throw new NoValidProgramNameException(Language.message001); throw new NoValidProgramNameException(Language.message001);
} }
Arg = ""; Arg = "";
WinStyleMinimized = false; WinStyleMinimized = false;
ProcessName = SetProcessName(program); ProcessName = SetProcessName(program);
} }
private void SetBaseValues(string program, bool winStyleMinimized) private void SetBaseValues(string program, bool winStyleMinimized)
{ {
if (File.Exists(program)) if (File.Exists(program))
{ {
Program = Path.GetFileName(program); Program = Path.GetFileName(program);
ProgramPath = Path.GetDirectoryName(program); ProgramPath = Path.GetDirectoryName(program);
} }
else else
{ {
throw new NoValidProgramNameException(Language.message001); throw new NoValidProgramNameException(Language.message001);
} }
Arg = ""; Arg = "";
WinStyleMinimized = winStyleMinimized; WinStyleMinimized = winStyleMinimized;
ProcessName = SetProcessName(program); ProcessName = SetProcessName(program);
} }
private void SetBaseValues(string program, string arg, bool winStyleMinimized) private void SetBaseValues(string program, string arg, bool winStyleMinimized)
{ {
if (File.Exists(program)) if (File.Exists(program))
{ {
Program = Path.GetFileName(program); Program = Path.GetFileName(program);
ProgramPath = Path.GetDirectoryName(program); ProgramPath = Path.GetDirectoryName(program);
} }
else else
{ {
throw new NoValidProgramNameException(Language.message001); throw new NoValidProgramNameException(Language.message001);
} }
Arg = arg; Arg = arg;
WinStyleMinimized = winStyleMinimized; WinStyleMinimized = winStyleMinimized;
ProcessName = SetProcessName(program); ProcessName = SetProcessName(program);
} }
private void SetBaseValues(string programPath, string programName, string arg, bool winStyleMinimized) private void SetBaseValues(string programPath, string programName, string arg, bool winStyleMinimized)
{ {
if (Directory.Exists(programPath)) if (Directory.Exists(programPath))
{ {
ProgramPath = programPath; ProgramPath = programPath;
} }
else else
{ {
throw new NoValidFolderStructureException(Language.message003); throw new NoValidFolderStructureException(Language.message003);
} }
if (File.Exists(String.Concat(programPath, "\\", programName))) if (File.Exists(String.Concat(programPath, "\\", programName)))
{ {
Program = programName; Program = programName;
} }
else else
{ {
throw new NoValidProgramNameException(Language.message002); throw new NoValidProgramNameException(Language.message002);
} }
Arg = arg; Arg = arg;
WinStyleMinimized = winStyleMinimized; WinStyleMinimized = winStyleMinimized;
ProcessName = SetProcessName(programName); ProcessName = SetProcessName(programName);
} }
private string SetProcessName(string program) private string SetProcessName(string program)
{ {
if (!String.IsNullOrEmpty(program)) if (!String.IsNullOrEmpty(program))
{ {
System.Text.StringBuilder sb = new System.Text.StringBuilder(); System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(program.Substring(0, 1).ToUpper() + program.Substring(1)); sb.Append(program.Substring(0, 1).ToUpper() + program.Substring(1));
return Path.GetFileNameWithoutExtension(sb.ToString()); return Path.GetFileNameWithoutExtension(sb.ToString());
} }
else else
{ {
throw new UnableToGenerateProcessNameException(Language.message002); throw new UnableToGenerateProcessNameException(Language.message002);
} }
} }
private void StartStop(string program, string arg, bool winStyle, string processName) private void StartStop(string program, string arg, bool winStyle, string processName)
{ {
if (!CheckProcessIsRun(processName)) if (!CheckProcessIsRun(processName))
{ {
Start(program, arg, winStyle); Start(program, arg, winStyle);
} }
else else
{ {
Stop(program); Stop(program);
} }
} }
private static bool CheckProcessIsRun(string processName) private static bool CheckProcessIsRun(string processName)
{ {
//Prüfen ob der Prozess läuft //Prüfen ob der Prozess läuft
return (Process.GetProcessesByName(processName).Length > 0); return (Process.GetProcessesByName(processName).Length > 0);
} }
private void Start(string program, string arg, bool winStyle) public bool CheckProcessIsRun()
{ {
try //Prüfen ob der Prozess läuft
{ return (Process.GetProcessesByName(ProcessName).Length > 0);
ProcessStartInfo startProgram = new ProcessStartInfo(program); }
startProgram.Arguments = arg;
if (winStyle) private void Start(string program, string arg, bool winStyle)
{ {
startProgram.WindowStyle = ProcessWindowStyle.Minimized; try
} {
Process.Start(startProgram); ProcessStartInfo startProgram = new ProcessStartInfo(program);
} startProgram.Arguments = arg;
catch (Exception) if (winStyle)
{ {
throw new UnableToRunProgramException(Language.message005); startProgram.WindowStyle = ProcessWindowStyle.Minimized;
} }
} Process.Start(startProgram);
}
private void Stop(string program) catch (Exception)
{ {
try throw new UnableToRunProgramException(Language.message005);
{ }
string process = program.Remove(0, program.LastIndexOf(@"\") + 1); }
process = process.Remove(process.Length - 4);
private void Stop(string program)
Process[] close = Process.GetProcessesByName(process); {
close[0].CloseMainWindow(); try
close[0].Kill(); {
} string process = program.Remove(0, program.LastIndexOf(@"\") + 1);
catch (Exception ex) process = process.Remove(process.Length - 4);
{
throw new UnableToStopProgramException("Programm konnte nicht beendet werden!\n\n" + ex); Process[] close = Process.GetProcessesByName(process);
} close[0].CloseMainWindow();
} close[0].Kill();
} }
catch (Exception ex)
#region Exceptions {
class NoValidFolderStructureException : ApplicationException throw new UnableToStopProgramException("Programm konnte nicht beendet werden!\n\n" + ex);
{ }
public NoValidFolderStructureException() }
{ }
}
#region Exceptions
public NoValidFolderStructureException(string message) class NoValidFolderStructureException : ApplicationException
: base(message) {
{ public NoValidFolderStructureException()
} {
}
public NoValidFolderStructureException(string message, Exception inner)
: base(message, inner) public NoValidFolderStructureException(string message)
{ : base(message)
} {
} }
class NoValidProgramNameException : ApplicationException public NoValidFolderStructureException(string message, Exception inner)
{ : base(message, inner)
public NoValidProgramNameException() {
{ }
} }
public NoValidProgramNameException(string message) class NoValidProgramNameException : ApplicationException
: base(message) {
{ public NoValidProgramNameException()
} {
}
public NoValidProgramNameException(string message, Exception inner)
: base(message, inner) public NoValidProgramNameException(string message)
{ : base(message)
} {
} }
class UnknownErrorException : ApplicationException public NoValidProgramNameException(string message, Exception inner)
{ : base(message, inner)
public UnknownErrorException() {
{ }
} }
public UnknownErrorException(string message) class UnknownErrorException : ApplicationException
: base(message) {
{ public UnknownErrorException()
} {
}
public UnknownErrorException(string message, Exception inner)
: base(message, inner) public UnknownErrorException(string message)
{ : base(message)
} {
} }
class UnableToRunProgramException : ApplicationException public UnknownErrorException(string message, Exception inner)
{ : base(message, inner)
public UnableToRunProgramException() {
{ }
} }
public UnableToRunProgramException(string message) class UnableToRunProgramException : ApplicationException
: base(message) {
{ public UnableToRunProgramException()
} {
}
public UnableToRunProgramException(string message, Exception inner)
: base(message, inner) public UnableToRunProgramException(string message)
{ : base(message)
} {
} }
class UnableToStopProgramException : ApplicationException public UnableToRunProgramException(string message, Exception inner)
{ : base(message, inner)
public UnableToStopProgramException() {
{ }
} }
public UnableToStopProgramException(string message) class UnableToStopProgramException : ApplicationException
: base(message) {
{ public UnableToStopProgramException()
} {
}
public UnableToStopProgramException(string message, Exception inner)
: base(message, inner) public UnableToStopProgramException(string message)
{ : base(message)
} {
} }
class UnableToGenerateProcessNameException : ApplicationException public UnableToStopProgramException(string message, Exception inner)
{ : base(message, inner)
public UnableToGenerateProcessNameException() {
{ }
} }
public UnableToGenerateProcessNameException(string message) class UnableToGenerateProcessNameException : ApplicationException
: base(message) {
{ public UnableToGenerateProcessNameException()
} {
}
public UnableToGenerateProcessNameException(string message, Exception inner)
: base(message, inner) public UnableToGenerateProcessNameException(string message)
{ : base(message)
} {
} }
#endregion
} public UnableToGenerateProcessNameException(string message, Exception inner)
: base(message, inner)
{
}
}
#endregion
}