Announcement

Collapse
No announcement yet.

Startparameter an laufende Anwendung abfangen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Startparameter an laufende Anwendung abfangen

    Guten Morgen liebe Programmiergemeinde


    Ich habe eine kleines Konsolenprogramm geschrieben, welches von einer anderen Anwendung 2 Parameter erhält, die dann anschliessend von meiner Anwendung weiterverarbeitet und anschliessend wieder weitergeleitet werden.


    Nun gibt es jedoch ein Problem, da die Anwendung mehrmals ausgeführt werden kann.

    1. Frage: Wie kann ich meine Anwendung auf eine einzige Instanz beschränken und dafür sorgen, dass die Anwendung permanent ausgeführt wird? Ich weiss zwar, dass das als Service sicherlich möglich ist, jedoch möchte ich es zuerst mit einer normalen Anwendung versuchen.


    Wie ich Startparameter abrufen und auswerten kann, weiss ich. Die Startparameter, welche bei der Anwendungsausführung übergeben werden kann ich erfolgreich auswerten.

    2. Frage: Wenn meine Anwendung mit einer einzigen Instanz ausgeführt wird und die externe Anwendung wieder neue Parameter übergibt, werden die CommandLineArguments der laufenden Instanz dann automatisch aktualisiert?


    Die Anwendung wird immer über "%Pfad%\tool.exe" "par1" "par2" aufgerufen.



    Bin froh für jeden Vorschlag


    Gruss
    LINK182
    IDE: Microsoft Visual Studio 2008 Professional SP1
    Programmiersprache: C#

  • #2
    Also ich empfehle dir wärmstens, es über einen Dienst (z. B. WCF) zu realisieren. Ansonsten bleibt dir für deine zwei Randbedingungen nur irgendein Gefrickel mit MultiThreading übrig.
    Die Zeit ist aber in die Entwicklung eines Dienstes besser investiert.

    Comment


    • #3
      Hallo,

      schließe micht TheoFontane an.

      ad 1) siehe hier

      ad 2) die Befehlszeilenargumente werden nur beim Start der Anwendung vom Betriebssystem and das Programm übergeben. Also nein.


      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Ev ist diese Technik hier

        http://www.marquardtnet.info/cecke/q...quicky_19.html

        ebenfalls unter NET verfügbar
        Christian

        Comment


        • #5
          Danke für die bisherigen Antworten.


          Hab' mir schon irgendwie gedacht, dass ich wohl einen Service programmieren müsste. Ich stellte die Frage absichtlich so, weil die Anwendung ansich bereits im Einsatz ist. Muss ich mir wohl ein bisschen Zeit nehmen. WCF kann ich dabei jedoch nicht verwenden, da ich mit voller Absicht für die .NET 2.0 Plattform schreibe (nur bei dieser Anwendung).

          Bzgl. Mutex, werde ich mal die Links durchackern. Ist sicherlich auch so interessant.


          Nun eine andere Frage:
          Damit ich ein kleines Workaround habe, bis ich das mit dem Service in den Griff bekomme, wollte ich fragen, ob ihr eine gute Möglichkeit wisst, wie ich verhindern kann, dass bei mehrmaligem Aufruf der Anwendung die Parameter vermischt werden. Vermischt werden sie deswegen, weil die Anwendung die bearbeiteten Parameter in eine Datei speichert. Wird die Anwendung ein zweites Mal gleichzeitig ausgeführt, versuchen beide gleichzeitig die Datei zu schreiben.

          Ich dachte dabei an eine Möglichkeit, die Anwendungsaufrufe irgendwie abzufangen und mit einem Timer oder über ein Log zu steuern, damit die Dateien nacheinander versetzt geschrieben und weitergeleitet werden.


          Natürlich bin ich auch hier wieder sehr dankbar für einige Vorschläge =)



          Gruss
          LINK182
          IDE: Microsoft Visual Studio 2008 Professional SP1
          Programmiersprache: C#

          Comment


          • #6
            weil die Anwendung die bearbeiteten Parameter in eine Datei speichert. Wird die Anwendung ein zweites Mal gleichzeitig ausgeführt, versuchen beide gleichzeitig die Datei zu schreiben.
            Dateien werden (standardmäßig) exklusiv geöffnet und somit würde ein Fehler entstehen und kein "Vermischen".

            Alles in allem ein ziemlich brutaler Workaround -> daher würde ich das überdenken.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Dann braucht man ja die Datei nur exklusiv zu öffnen und bis Programmende gesperrt zu halten. Wenn man nun bei Programmstart mit einem try/catch das exklusive Öffnen probiert und es geht nicht, dann ist man wahrscheinlich nicht der erste Aufruf und könnte in diesem Fall dem Aufrufer dies anzeigen und ihm anbieten zu warten (und in einer Schleife zB jede Sekunde probieren, ob die Datei wieder frei ist) oder abzubrechen. Wäre für mich die sauberste Lösung.

              bye,
              helmut

              Comment

              Working...
              X