Starten mit Parameter und XML einlesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von AKP.

    Starten mit Parameter und XML einlesen

    Hallo

    In meinem Programm lade ich beim Start eine XML-Datei in ein Dataset:

    VB.NET-Quellcode

    1. Public _DataFile As New FileInfo("test.xml")
    2. If _DataFile.Exists() Then
    3. dsStation.ReadXml(_DataFile.FullName)
    4. Else
    5. MessageBox.Show("Error loading Database")
    6. End If


    Dies funktioniert soweit einwandfrei. Nun möchte ich das Programm aber auch mit Parameter starten können (Windows Explorer Rechtsklick - Öffnen mit..)

    VB.NET-Quellcode

    1. ​Dim parameter() As String = Environment.GetCommandLineArgs().ToArray
    2. If parameter.Count > 1 Then
    3. For i As Integer = 1 To parameter.Count - 1
    4. ... mach was
    5. Next
    6. End If


    Ich kann die Parameter zwar auslesen, aber die xml-Datei wird nicht mehr eingelesen, da _DataFile dann plötzlich C:\WINDOWS\system32\test.xml" wird.

    AKP schrieb:

    da _DataFile dann plötzlich C:\WINDOWS\system32\test.xml" wird.


    Plötzlich von allein wird das nicht passieren. Auch kann DataFile nicht ein String werden, es ist und bleibt ein FileInfo, hast du schlecht beschrieben.

    Mach ein kleines leeres Projekt, mit diesem Code, starte diese Programm mit einer XML und Poste den Inhalt vom Clipboard hier, wie auch den Pfad der XML die du zum starten genutzt hast.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim parameter() As String = Environment.GetCommandLineArgs()
    3. Dim out As String = ""
    4. For i As Integer = 0 To parameter.Count - 1
    5. out &= parameter(i) & Environment.NewLine
    6. Next
    7. If Not String.IsNullOrEmpty(out) Then
    8. Clipboard.SetText(out)
    9. Else
    10. MessageBox.Show("Kamen keine Argumente rein???")
    11. End If
    12. End Sub


    Edit @AKP
    Hab eben den Code noch mal geändert. Hab von dir kopiert weil ich faul bin und nicht gesehen das Argument(0) wegen der Schleife die bei 1 losgeht nicht drin stehen würde.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    Erst mal danke für deine Hilfe. Ich habe mich wahrscheinlich nicht so klar ausgedrückt. Bei den Parameter handelt es sich um Audiodateien, welche irgendwo auf der Platte liegen können. Diese werden auch immer korrekt übernommen. Dies hat aber nicht direkt was mit dem Lesen der XML-Datei zu tun. Ich kann den ganzen Abschnitt mit den Parametern auch auskommentieren. Wenn ich das Programm trotzdem mit Parametern starte (ohne die auch auszulesen) funktioniert das laden der XML-Datei nicht mehr.

    Das Problem muss hier liegen:

    VB.NET-Quellcode

    1. ​ MessageBox.Show(_DataFile.FullName.ToString)


    Beim Starten ohne Parameter: E:\Projekt1\Projekt1\bin\Debug\test.xml
    Beim Starten mit Parameter: C:\Windows\System32\test.xml
    Ich blicke hier grad nicht durch.

    Editiert, Ich glaub ich habs.

    VB.NET-Quellcode

    1. Public _DataFile As New FileInfo("test.xml")


    Du benutzt hier einen relativen Pfad, ist deine EXE etwa da wo sie nichts zu suchen hat also in "C:\WINDOWS\system32\"?
    Das wäre eine Erklärung warum der volle Pfad des FileInfos dann "C:\WINDOWS\system32\test.xml" ist.

    Der Pfad zur XML kommt via Argment rein, oder soll das fix sein? Wenn via Argument, mach das was ich in meinem vorherigen Post sagte, starte dein Programm werf alle Parameter wie ich zeigte ins Clipboaord und poste hier alle Argumente, dann habe ich die Infos die ich glaube zu brauchen. Sonst nimm einen festen statt relativen Pfad.

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Takafusa“ ()

    Hier zu deinem Test:

    Quellcode

    1. E:\Projekt1\Projekt1\bin\Debug\MeineApp.exe
    2. G:\Chris de Burgh\Chris de Burgh - The Lady In Red - The Very Best Of Chris De Burgh\01. Here Is Your Paradise.mp3

    Im Windows/System32 Ordner befindet sich die exe nicht. Nochmals zu erwähnen wäre, dass das Starten mit Parameter über den WindowsExplorer mit Kontextmenü (Öffnen mit..) erfolgt.
    Vielleicht muss ich mit Application.StartupPath oder Application.ExecutablePath arbeiten.

    So würde es tatsächlich funktionieren:

    VB.NET-Quellcode

    1. ​ dsStation.ReadXml(Application.StartupPath + "/test.xml")
    Startest du dein Programm mit Adminrechten? Kenne das von der Console(cmd.exe), wenn man di als Admin startet, ist system32/syswow64 das working directory. Du kannst das aber auch selbst setzen.
    https://docs.microsoft.com/de-de/dotnet/api/system.io.directory.setcurrentdirectory?view=net-5.0

    Nein mit den Adminrechten sollte es auch nicht sein, die exe ist ja nicht in den System-Ordnern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()