Auswertung der Kommandozeile in VB .net

30/11/2009 - 22:35 von Diego Wegner | Report spam
Hallo!

Ich habe ein Programm in VB .net (Express Edition) geschrieben, das mit
einer Sub Main statt mit dem Hauptformular startet. Damit das überhaupt
möglich ist, musste ich das Anwendungsframework deaktivieren.

Ziel ist es, Kommandozeilenparameter auszulesen. Damit kann das Programm
fallweise arbeiten, ohne eine Benutzeroberflàche anzeigen zu müssen
(z.B. um ein Netzlaufwerk gemàß vorkonfigurierter und aus einer INI
auszulesender Parameter mit einem lokalen Laufwerkbuchstaben zu
verbinden). Deshalb die Idee mit dem Start über Sub Main.

Im Netz habe ich einige Beispiele für die Auswertung der Kommandozeile
gefunden. Diese funktionieren jedoch sàmtlich nicht, so auch nachfolgende:

**********************************************************************************

Sub Main(ByVal args() As String)


' Ordner zum Speichern von Anwendungsdaten erstellen
If Dateihandling.OrdnerFürAnwendungsdatenPrüfenErstellen() =
False Then
Exit Sub 'Programm beenden, falls fehlgeschlagen
End If

'Grundlegene Startaufgaben erledigen


If args.Length > 0 Then
MsgBox("Test")
For n As Integer = 0 To
Environment.GetCommandLineArgs().Length - 1
Try
If n = 1 Then
Dim Filename As String = args(0)
Process.Start(Filename)
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Next
Else
MessageBox.Show("Benoetigte Uebergabeparameter fehlen...",
"Info")
End If
**********************************************************************************

In einer àlteren Anwendung, die mit der Hauptform startet, klappt die
Verwendung von Environment.GetCommandLineArgs() dagegen -- dort benutze
ich sie, um per Doppelklick geöffnete Dateien in eine RTF-Box zu laden.
Dort ist das Anwendungsframework auch ativiert, weil dieses Programm
keine Tàtigkeiten "still" (ohne Benutzerobeflàche) verrichten kann.

Deshalb vermute ich nun, dass das Anwendungsframework für das Auswerten
der Kommandozeile erforderlich ist (für weitegehende intensive Tests
fehlt mir jetzt leider die Zeit, muss morgen früh wieder arbeiten). Ist
diese Vermutung richtig?

Wenn nicht, wie bekommt man es hin, dass ich ohne Anwendungsframework in
der Sub Main bzw. in einer von dort aufgerufenen Prozedur (das Modul
heißt "Programmstart" und beinhaltet u.a. die Sub Main) an die
Kommandozeilen-Infos konmt?

Wenn das ohne Awendungsframework nicht geht, wie bekomme ich eine
komplett ohne Benutzeroberflàche arbeitende Funktion hin, wenn ich mit
der Hauptform (odwer einer anderen Form) starten muss?

Mit der oben dargestellten Variante und den anderen im Netz gefundenen
Möglichkeiten zur Kommandozeilenauswertung passiert nach dem Doppleklick
auf eine Datei und der Auswahl meines Programms zum Öffnen ("Öffnen
mit"-Funktion im Windows Explorer) gar nichts. Auch die Test-Messagebox
wird nicht angezeigt. Es sieht aus als ob das Programm sofort wieder
entladen wird.

Noch eine Frage: Wie kann ich die Kommandozeilen-Funktion im Debug-Modus
testen? Wenn die hauptform gestartet wird, kann ich Haltepunkte setzen,
Einzelschritt (F8) durchführen und anderes, um Programmfehler
aufzuspüren. Wie macht man sowas, um die Kommandozeile (z.B. nach
Dopplelklick auf eine Datei bzw. Verknüpfung mit Parametern im Explorer)
zu testen?

Für Hilfe vorab herzlichen Dank!

Gruß
Diego Wegner
 

Lesen sie die antworten

#1 Wolfgang Enzinger
30/11/2009 - 23:51 | Warnen spam
On Mon, 30 Nov 2009 22:35:21 +0100, Diego Wegner wrote:

Ich habe ein Programm in VB .net (Express Edition) geschrieben, [...]



Dann bist du hier falsch. Probier's mal in folgender Gruppe:
microsoft.public.de.german.entwickler.dotnet.vb

Viele Grüsse,
Wolfgang
http://www.enzinger.net

Ähnliche fragen