Benutzer mit den meisten Antworten
läuft dieses Programm bereits?

Frage
-
Antworten
-
Der Vorschlag hier ist zwar eine Visual Basic-Bibliothek, aber die kann man ja GottSeiDank auch in C# einbinden.
Verwende die Klasse Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase. (oder ähnliches)
Du kannst mit "IsSingleInstance=true" bestimmen, dass die Applikation nur einmal exisitert. Beim überschreiben von "OnCreateMainForm" erstellst du Deine Form. "StartupNextInstance" ist ein klasse event: Wird eine zweite Instanz der Applikation gestartet, wird diese ja sofort beendet, ABER Deine laufende Applikation bekommt das mit, Die Übergabeparameter(argumente) werden dem Event übergeben. D.h. die alte, noch laufende Applikation kann auf den Prozessstart reagieren...
Diese Lösung ist nicht ganz so, wie du angefragt hast. Aber meist ist das eine gute Lösung für das Problem, das hinter eben dieser Anfrage steht.
Edit:
Alternativ kannst du natürlich mit System.Diagnostics.Process.GetProcesses() überprüfen, ob der Process bereits läuft...
- Bearbeitet GreatVolk Dienstag, 16. November 2010 14:39 Zusatz
- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45
-
Hallo Michael
neben der bekannten VB-Variante (nutzt intern ua Remoting)
hier einige Ansätze in C# für eigene Lösungen (ungeprüft)
http://blogs.microsoft.co.il/blogs/maxim/archive/2010/02/13/single-instance-application-manager.aspxhttp://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-1-(introduction).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-2-(WM_COPYDATA).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-3-(WCF).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-4-(WindowsFormsApplicationBase).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-5-(Remoting).aspx
- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45
-
Hallo M.,
Die Verwendung von zusätzlichen größeren DLLs, nur, um ein Feature daraus zu benutzen, (wie etwa einer C# fremden VB Dll) behagt mir persönlich nicht besonders ... -> u.a. unnütze Load-Last etc..
Dennoch ist diese Mthode ja bekannt:
[Scott Hanselman - The Weekly Source Code 31- Single Instance WinForms and Microsoft.VisualBasic.dll]
http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx
Ich würde eher dedizierte Funktionalität einbinden/erstellen, die dann auch gem. SRP- und OCP Prinzip ggf. in ein Interface abstrahiert werden kann. Es gibt hier genug Implementations-Vorschläge, bzw. fertige Klassen.Einige davon hier:
[Single Instance Application Manager - Maxim]
http://blogs.microsoft.co.il/blogs/maxim/archive/2010/02/13/single-instance-application-manager.aspxInitialInstanceActivator - Klasse in:
[genghis - Release: Genghis v0.8]
http://genghis.codeplex.com/releases/view/4954[Creating a Single Instance Application in C#]
http://iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx[C# Single-Instance Windows Form]
http://dotnetperls.com/single-instance-windows-form[WPF Single Instance Application - Arik Poznanski's Blog]
http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx
ciao Frank- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45
Alle Antworten
-
Der Vorschlag hier ist zwar eine Visual Basic-Bibliothek, aber die kann man ja GottSeiDank auch in C# einbinden.
Verwende die Klasse Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase. (oder ähnliches)
Du kannst mit "IsSingleInstance=true" bestimmen, dass die Applikation nur einmal exisitert. Beim überschreiben von "OnCreateMainForm" erstellst du Deine Form. "StartupNextInstance" ist ein klasse event: Wird eine zweite Instanz der Applikation gestartet, wird diese ja sofort beendet, ABER Deine laufende Applikation bekommt das mit, Die Übergabeparameter(argumente) werden dem Event übergeben. D.h. die alte, noch laufende Applikation kann auf den Prozessstart reagieren...
Diese Lösung ist nicht ganz so, wie du angefragt hast. Aber meist ist das eine gute Lösung für das Problem, das hinter eben dieser Anfrage steht.
Edit:
Alternativ kannst du natürlich mit System.Diagnostics.Process.GetProcesses() überprüfen, ob der Process bereits läuft...
- Bearbeitet GreatVolk Dienstag, 16. November 2010 14:39 Zusatz
- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45
-
Hallo Michael
neben der bekannten VB-Variante (nutzt intern ua Remoting)
hier einige Ansätze in C# für eigene Lösungen (ungeprüft)
http://blogs.microsoft.co.il/blogs/maxim/archive/2010/02/13/single-instance-application-manager.aspxhttp://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-1-(introduction).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-2-(WM_COPYDATA).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-3-(WCF).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-4-(WindowsFormsApplicationBase).aspx
http://dzimchuk.net/blog/post/Single-instance-of-a-WPF-app-e28093-part-5-(Remoting).aspx
- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45
-
Hallo M.,
Die Verwendung von zusätzlichen größeren DLLs, nur, um ein Feature daraus zu benutzen, (wie etwa einer C# fremden VB Dll) behagt mir persönlich nicht besonders ... -> u.a. unnütze Load-Last etc..
Dennoch ist diese Mthode ja bekannt:
[Scott Hanselman - The Weekly Source Code 31- Single Instance WinForms and Microsoft.VisualBasic.dll]
http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx
Ich würde eher dedizierte Funktionalität einbinden/erstellen, die dann auch gem. SRP- und OCP Prinzip ggf. in ein Interface abstrahiert werden kann. Es gibt hier genug Implementations-Vorschläge, bzw. fertige Klassen.Einige davon hier:
[Single Instance Application Manager - Maxim]
http://blogs.microsoft.co.il/blogs/maxim/archive/2010/02/13/single-instance-application-manager.aspxInitialInstanceActivator - Klasse in:
[genghis - Release: Genghis v0.8]
http://genghis.codeplex.com/releases/view/4954[Creating a Single Instance Application in C#]
http://iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx[C# Single-Instance Windows Form]
http://dotnetperls.com/single-instance-windows-form[WPF Single Instance Application - Arik Poznanski's Blog]
http://blogs.microsoft.co.il/blogs/arik/archive/2010/05/28/wpf-single-instance-application.aspx
ciao Frank- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 19. November 2010 08:37
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 23. November 2010 07:45