Announcement

Collapse
No announcement yet.

Kommandozeilenparameter (args)

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

  • Kommandozeilenparameter (args)

    Hallo Leute,

    komme nicht weiter und im Netz habe ich bislang nicht das richtige gefunden.

    Ich habe ein kleines Datensicherungsprogramm geschrieben, welches speziell nur für eine Anwendung da ist.
    Nun möchte ich dies mit Kommandozeilenoptionen ausstatten, um es z.B. aus einer Verknüpfung zu starten. Die Optionen sollen sein "/s" für Silent und "/a" für Admin.

    Silent soll dann eine Sub starten, um die Datensicherung autom. durchzuführen.
    Admin blendet nur eine Menüleiste ein.

    Könnt Ihr mir helfen, hier den richtigen Ansatz zu finden? Wäre Euch sehr dankbar.

    Danke im Voraus..
    Jerry

  • #2
    Hallo,

    in VB.net ist es nicht so offensichtlich wie es geht (wie zB in C#).

    Egal ob Winform- oder Consolenanwendung es wird immer mit eine Main-Methode gestartet. Dieser kann ein Argument übergeben werden.

    Für VB.net muss also die Program.vb bearbeitet werden. Im folgenden Beispiel wird der schematische Aufbau gezeigt mit dem es geht.

    [highlight=vbnet]
    Imports System
    Imports System.Windows.Forms

    Namespace Sicherung
    Friend NotInheritable Class Program
    <STAThread()> _
    Private Shared Sub Main(ByVal args As String())
    ' Prüfen ob Befehlszeilenargumente vorhanden sind:
    If args.Length <> 0 Then
    Select Case args(0)
    Case "-s"
    ' Führe die Methode zum Importieren aus.
    Exit Select
    Case "-a"
    ' Zeige eine Form an:
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(Fals e)
    Application.Run(New MainForm())
    Exit Select
    Case Else
    Exit Select

    End Select
    Else
    ' Zeige Hilfe an oder sonst was.
    End If
    End Sub
    End Class
    End Namespace
    [/highlight]

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

    Comment


    • #3
      Hallo gfoidl,

      erst mal danke für Deine Hilfe! Allerdings ist mir das noch nicht so ganz klar, da ich noch Anfänger bin!

      Was, bzw. wie meinst Du das "..muss also die Program.vb bearbeitet.."?

      Wenn ich das richtig verstanden habe, brauche ich eine Main welche dann je nach Argument die Hauptform öffnet und entsprechende Sub(s) ausführt.

      Hast Du irgend eine Literatur, wo ich das nachlesen (lernen) kann?

      Bitte entschuldige, bin echter Anfänger..

      Danke Dir
      Jerry

      Comment


      • #4
        Hallo,

        Wenn ich das richtig verstanden habe, brauche ich eine Main welche dann je nach Argument die Hauptform öffnet und entsprechende Sub(s) ausführt.
        Das hast du richtig verstanden.

        In der Regel ist die Main in der Program.vb und deshalb muss diese bearbeitet werden.

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

        Comment


        • #5
          Originally posted by gfoidl View Post
          Hallo,


          Das hast du richtig verstanden.

          In der Regel ist die Main in der Program.vb und deshalb muss diese bearbeitet werden.

          mfG Gü
          Könntest Du mir hierzu ein Beispiel geben? Sorry, wenn ich nerve.

          Jerry

          Comment


          • #6
            Das Beispiel ist oben. Mehr ist nicht nötig.

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

            Comment


            • #7
              ich denke, mir ist die "Position" bzw. die Definition der Main nicht klar!

              Ich habe eine Windows Forms Anwendung. Nun muss diese Main ja vor dem Form-Load Ereignis greifen. Das ist mein Problem, das habe ich nicht verstanden.

              Keines meiner Bücher will mir das verraten.. Zumindest nicht so, dass ich das verstehe.

              Könntest Du mir den Code eines kleinen Projektes zum lernen zur Verfügung stellen? Ich weiß, ich nerve, aber es wäre sehr wichtig für mich.

              DANKE für Dein Verständnis.

              Comment


              • #8
                Moment..

                habe gerade die Programm.vb mit dem Editor geöffnet! Denke ich komme Deinen Ausführungen näher!

                Kann ich das nur mit dem Editor machen?

                Comment


                • #9
                  nein, das war's wohl nicht..

                  Comment


                  • #10
                    Ein ausführbares Programm besitzt immer einen Einstiegspunkt von dem aus die Programmausführung gestartet wird - die Main().

                    Jedes Programm besteht im Quellocde aus ein oder mehr Dateien. In einer dieser Dateien muss die Main() sein. Standardmäßig ist sie in Program.vb.

                    In der Main() wird dann zB eine Form gestartet. Erst dann wird das Form-Load Ereignis ausgelöst.

                    Die Main() ist also die Wurzel allen Übels - ich meine der Beginn jedes Programms.


                    Einem Programm können Befehlszeilenargumente übergeben werden. Diese können als direkte Argumente an die Main verstanden werden, genau so wie sonst Argumente an eine Prozedur übergeben werden.


                    mfG Gü

                    PS: Da VB seit je her viel von diesem Vorgehen vor dem Programmiere rversteckt ist dies nicht so offensichtlich wie zB für einen C-Programmierer.
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Ja, ich glaub' jetzt hab ichs! Setze es gerade um und es scheint zu funktionieren ;o)

                      Hey Super und nochmal vielen Dank für Deine Hilfe und Deine Geduld mit mir!

                      Gruß aus dem sonnigen Jagsttal
                      Jerry

                      Comment


                      • #12
                        Wenn es zu umständlich wird, ein bestehendes Projekt auf den Start einer Main Routine zu verändern, gibt es jederzeit die Möglichkeit, über System.Environment.GetCommandLineArgs() die Aufrufparameter abzurufen, aber Achtung: der erste Eintrag ist der Name des ProgrammFiles!

                        Ich erwähne es nur der Vollständigkeit halber, manchmal ist es aber auch einfacher die so abzufragen. Wenn man die Information aus den Parametern irgendwo ganz tief im Code braucht, weil z.B. im 7 Unterfenster je nach Administation andere Buttons freigegeben werden sollen oder bestimmte Meldungen in fehlerbehandlungen nicht ausgegeben werden dürfen, müsste man sonst globale Variablen (oder eine entsprechende Struktur) anlegen, und jeweils beim Zugriff überprüfen, ob die überhaupt gefüllt wurden (also bei denen, bei denen Standardwerte keinen Sinn machen).

                        Gruß
                        Martin

                        Comment

                        Working...
                        X