none
in Autostart gestartetem vb.net Programm immer wieder eine Datei zum bearbeiten übergeben RRS feed

  • 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

    Donnerstag, 1. September 2011 06:51

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:

    http://msdn.microsoft.com/de-de/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.startupnextinstance.aspx

    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
    Donnerstag, 1. September 2011 07:11
    Moderator
  • 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
    Montag, 5. September 2011 05:41
    Moderator

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:

    http://msdn.microsoft.com/de-de/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase.startupnextinstance.aspx

    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
    Donnerstag, 1. September 2011 07:11
    Moderator
  • 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

    Donnerstag, 1. September 2011 07:30
  • 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
    Donnerstag, 1. September 2011 07:40
    Moderator
  • 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

    Donnerstag, 1. September 2011 08:07
  • 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
    Donnerstag, 1. September 2011 19:35
    Moderator
  • 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

    Samstag, 3. September 2011 13:19
  • 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
    Montag, 5. September 2011 05:41
    Moderator
  • Hallo Thorsten,

    vielen Dank für die vielen Informationen.

    Jetzt funktioniert die Software komplett wie gewünscht.

    Uwe

    Montag, 5. September 2011 10:25