Benutzer mit den meisten Antworten
in Autostart gestartetem vb.net Programm immer wieder eine Datei zum bearbeiten übergeben

Frage
-
Guten Tag,
aus Geschwindigkeitsgründen will ich ein in vb.net 2010 geschriebenes Programm nicht jedesmal neu starten, sondern nur eine Datei zum Bearbeiten übergeben, d.h. das Programm muß in den Vordergrund, interaktiv diese Datei bearbeiten und wird dann wieder "geschlossen",d.h. die Bearbeitung ist fertig und das Programm verschwindet wieder in den Hintergrund.
Es handelt sich jedesmal um eine andere Datei, die bearbeitet werden soll.
Ich bin mir über den Lösungsweg nicht klar, wird es mit .net remoting, WCF oder anders gelöst ??
Bei .net Remoting hätte ich dann ein Verständnisproblem, der "Server" muß in den Vordergrund, die Bearbeitung interaktiv durchführen und dann wieder in den Hintergrund, aus verschiedenen Gründen muß für jeden Anwender ein unabhängiger Server gestartet werden.
Vielen Dank für Hinweise zum Lösungsweg.
Uwe
Antworten
-
Hallo Uwe,
so ganz klar ist mir nicht, was Du eigentlich vorhast und wie Deinem Programm die Datei übergeben werden soll. Soll der Anwender diese doppelt anklicken können und dann geht Deine Anwendung auf? Wenn ja, dann braucht es hier noch keine Remoting oder WCF Lösungen, wobei dies auch eine Variante wäre. Bei Verwendung eine Einzelinstanzanwendung, kannst Du über das StartupNextInstance Ereignis die Kommandozeilenargumente auslesen, mit denen die zweite Instanz gestartet wurde und diese in Deinem Hintergrundprogramm entsprechend verarbeiten:
Voraussetzung ist, dass die Dateien mit Deiner Anwendung verknüpft sind. Wenn die Bearbeitung abgeschlossen ist, kannst Du Deine Anwendung dann wieder ausblenden.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert picheline Montag, 5. September 2011 10:36
-
Hallo Uwe,
Dein Projekt braucht mindestens ein Formular. Dieses wird i.d.R. automatisch angezeigt. Damit dieses nicht angezeigt wird, kannst Du die OnVisibleChanged Methode überschreiben und das Formular grundsätzlich ausblenden:
Public Class Form1 Protected Overrides Sub OnVisibleChanged(e As System.EventArgs) Me.Visible = False End Sub End Class
Wenn Du das Formular dennoch zur Anzeige brauchst, dann kannst Du dem Formular noch spezielle Eigenschaften verpassen, so dass es bei Bedarf sichtbar gemacht werden kann. Sobald Du das Formular schließt, wird Deine Anwendung beendet.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert picheline Montag, 5. September 2011 10:36
Alle Antworten
-
Hallo Uwe,
so ganz klar ist mir nicht, was Du eigentlich vorhast und wie Deinem Programm die Datei übergeben werden soll. Soll der Anwender diese doppelt anklicken können und dann geht Deine Anwendung auf? Wenn ja, dann braucht es hier noch keine Remoting oder WCF Lösungen, wobei dies auch eine Variante wäre. Bei Verwendung eine Einzelinstanzanwendung, kannst Du über das StartupNextInstance Ereignis die Kommandozeilenargumente auslesen, mit denen die zweite Instanz gestartet wurde und diese in Deinem Hintergrundprogramm entsprechend verarbeiten:
Voraussetzung ist, dass die Dateien mit Deiner Anwendung verknüpft sind. Wenn die Bearbeitung abgeschlossen ist, kannst Du Deine Anwendung dann wieder ausblenden.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert picheline Montag, 5. September 2011 10:36
-
Hallo Thorsten,
Mein Programm dient nur als Middleware,d.h. aus einem Programm wird mein Programm mit einem (ggfs. 2 Parametern) aufgerufen. Ein Parameter ist jedesmal der absolute Pfad inkl. Dateiname und Erweiterung, die weiteren Parameter sind optinal, da diese auch vorab hinterlegt werden können.
Da der komplette Start meines Programms, das wiederum weitere DLL's aus einem Software-SDK benötigt, "sehr" lange dauert (auf einem Citrix-Server bis zu 30 Sekunden), möchte ich das Programm bei der Anmeldung des jeweiligen Users im Autostart bereits starten.
Wenn jetzt aus der anderen Applikation unser Programm mit dem Dateinamen aufgerufen wird, soll möglichst dem bereits gestarteten Programm nur der Dateiname übergeben werden.
Uwe
-
Hallo Uwe,
das beschriebene Szenario solltest Du ohne weiteres mit beschriebener Einzelinstanzanwendung und dem StartupNextInstance Ereignis lösen können. Dort bekommst Du dann die übergebene Kommandozeile mit dem Dateinamen geliefert.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Thorsten,
vielen Dank für die schnellen Antworten. Ich habe inzwischen parallel versucht, damit anzufangen. Hierzu noch folgende Informationen:
Meine Appliaktion ist als Konsolenanwendung geschrieben, daher hatte ich diesen Ansatz nicht weiter verfolgt. Meine Appliaktion initialisiert die per SDK zur Verfügung gestellten DLL's. Diese DLL's funktionieren nur mit einem Lizenzserver, d.h. ich hole eine Lizenz von einem Lizenzserver und kann dann die entsprechende DLL benutzen, die die benötigte Oberfläche zur Verfügung stellt.
Ich müßte also als erstes meine Appliaktion in eine "unsichtbare" WindowsForms Anwendung ändern.
Uwe
-
Hallo Uwe,
das es aktuell eine Konsolenanwendung ist, habe ich so jetzt nicht in Betracht gezogen. Es ist aber normal kein Problem, diese in eine Windows Forms Anwendung zu konvertieren.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Thorsten,
vielen Dank für die Hinweise und Tips.
Ich habe das Programm jetzt entsprechend geändert und es funktioniert in der "Rohversion" wie ich es mir gewünscht habe.
Eine Feinheit habe ich noch nicht gelöst;
in "ApplicationEvents" steuere ich das Programm, so dass es als BatchApplication arbeitet.
Welcher Parameter fehlt mir, dass sich das Programm beim ersten Start wie ein Programm "Terminate and stay resident" verhält, d.h. das sich das Programm nicht wieder beendet. Zur Zeit halte ich den ersten Start nach allen Initialisierungsschritten mit einer Msgbox an.
Vielen Dank
Uwe
-
Hallo Uwe,
Dein Projekt braucht mindestens ein Formular. Dieses wird i.d.R. automatisch angezeigt. Damit dieses nicht angezeigt wird, kannst Du die OnVisibleChanged Methode überschreiben und das Formular grundsätzlich ausblenden:
Public Class Form1 Protected Overrides Sub OnVisibleChanged(e As System.EventArgs) Me.Visible = False End Sub End Class
Wenn Du das Formular dennoch zur Anzeige brauchst, dann kannst Du dem Formular noch spezielle Eigenschaften verpassen, so dass es bei Bedarf sichtbar gemacht werden kann. Sobald Du das Formular schließt, wird Deine Anwendung beendet.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert picheline Montag, 5. September 2011 10:36