Software hintereinander installieren

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

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Tealk.

    Software hintereinander installieren

    Servus,

    ich gleich nochmal :/
    In meinem Tool habe ich eine Liste mit der ich Software installiere, nun hätte ich das gerne noch so gehandhabt, dass ich in der CheckedListBox ausgebe und nicht in der ListBox.
    Dort dann eben die Programme auswähle die ich Installieren möchte und der diese dann nacheinander Startet, ich schätze ich muss irgendwie Überwachen ob der Installationsprozess läuft nur weiß ich gerade nicht wie ich diesen abfrage.

    VB.NET-Quellcode

    1. ​Private Sub AlteSoftwareToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AlteSoftwareToolStripMenuItem.Click
    2. AuswahlBox.Items.Clear()
    3. Dim datenbankneu As New DirectoryInfo("pfad\zur\software")
    4. For Each Dateineu As FileInfo In datenbankneu.GetFiles("*.lnk")
    5. 'CheckedListBox1.Items.Add(Dateineu.Name)
    6. ListBox1.Items.Add(Dateineu.Name)
    7. Next
    8. AuswahlBox.Visible = True
    9. InstallationProgramme.Visible = True
    10. End Sub
    Das kommt auf die Installer an.

    Eine Möglichkeit kann sein: Process.WaitForExit

    Damit kannst du, nachdem du einen Prozess gestartet hast auf die Beendung warten.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Und wie Nutze ich das? Ich muss doch da bestimmt irgend einen ProzessID oder so angeben damit er weiß auf was er wartet, die muss ich ja auch noch irgendwie auslesen.
    Also in Shell scripts zb kann ich sagen starte den Prozess und Merke dir die ID davon, geht das hier auch?

    Tealk schrieb:

    In meinem Tool
    Schreibst Du tatsächlich einen eigenen Installer?
    Lass das sein, denn die Geister, die Du rufst, wirst Du nicht mehr los.
    Nutze z.B. das Inno-Setup-Tool, gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Tealk schrieb:

    Und wie Nutze ich das? Also in Shell scripts zb kann ich sagen starte den Prozess und Merke dir die ID davon, geht das hier auch?


    Nein. In VB.NET hast du die Process Class. Damit startest du den Prozess und dann wartest du bis er beendet ist. Klappt natürlich nur bei Programmen, die nicht selber noch ein 2. starten und sich dann beenden.

    VB.NET-Quellcode

    1. Dim p As New Process()
    2. p.StartInfo.FileName = "C:\\prog.exe"
    3. p.Start()
    4. p.WaitForExit
    Das ist meine Signatur und sie wird wunderbar sein!

    RodFromGermany schrieb:

    Schreibst Du tatsächlich einen eigenen Installer?

    Nein ich rufe nur die Installer auf, bzw liegen im Laufwerk Verknüpfungen zu den Installern, die sind leichter Auszubessern wenn mal ne neue Version raus kommt. Ansonsten müsste ich dies ja als Variable in mein Tool schreiben. Aber damit ich nicht immer erst aufs Laufwerk muss und alle einzeln anklicken wollte ich das da mal zusammen fassen.
    Wenns ist schreib ich die Pfade auch noch in die App.cfg

    Mono schrieb:

    Nein. In VB.NET hast du die Process Class. Damit startest du den Prozess und dann wartest du bis er beendet ist. Klappt natürlich nur bei Programmen, die nicht selber noch ein 2. starten und sich dann beenden.
    OK dann bleibt mir nichts anderes Übrig als die Pfade direkt anzugeben. Schade das auslesen der Verknüpfungen war viel angenehmer :PDann bastel ich da noch ein "For Each" rum und dann sollte das laufenOk dann vielen dank an alle :D

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

    Glaub ich nicht, dass das die einzige Möglichkeit ist.
    Aber ich muss zugeben, ich hab dein Anliegen garnet recht verstanden:

    Tealk schrieb:

    In meinem Tool habe ich eine Liste mit der ich Software installiere, nun hätte ich das gerne noch so gehandhabt, dass ich in der CheckedListBox ausgebe und nicht in der ListBox.
    Dort dann eben die Programme auswähle die ich Installieren möchte und der diese dann nacheinander Startet, ich schätze ich muss irgendwie Überwachen ob der Installationsprozess läuft nur weiß ich gerade nicht wie ich diesen abfrage.
    Was war hier die Frage?
    etwas in einer CheckedListbox auszugeben statt in einer Listbox? Aber im folgenden Code hastes doch gelöst - hättest nur die auskommentierte Zeile wieder einkommentieren müssen.

    Oder was ist die Frage?
    Dateien, die in einem Ordner liegen, in einer Listbox zu präsentieren?
    Oder von den Dateien die Namen in einer CheckedListbox, die Pfade dann aber zur weiteren Verarbeitung verwenden? Wäre mit Leichtigkeit lösbar, wenn du danach frügest.
    OK dann bleibt mir nichts anderes Übrig als die Pfade direkt anzugeben. Schade das auslesen der Verknüpfungen war viel angenehmer :PDann bastel ich da noch ein "For Each" rum und dann sollte das laufenOk dann vielen dank an alle


    Was meinst du damit? Verstehe ich nicht
    Das ist meine Signatur und sie wird wunderbar sein!
    Das geht mit jeder Datei, bei der unter Windows bekannt ist, wie Sie auszuführen ist. Was soll aber der Vorteil sein eine Verknüpfung zu starten gegenüber den normalen Installern ?
    Das ist meine Signatur und sie wird wunderbar sein!
    die Verknüpfungen hab ich so gesehen alle in einem Ordner und die kann ich dann eben auslesen:

    VB.NET-Quellcode

    1. Dim datenbankalt As New DirectoryInfo(My.Settings.hk_path & "\Softwareinstallationen x64\alt")
    2. For Each Dateialt As FileInfo In datenbankalt.GetFiles("*.lnk")
    3. AuswahlBox.Items.Add(Dateialt.Name)
    4. Next


    Ansonsten müsste ich alle Pfade per Hand ins Script eintragen und dann muss man immer wieder den Quellcode anfassen um was zu ändern.
    Naja dann nimm halt eine Datei mit den Pfaden drin. Die LNK Dateien musst ja im Zweifel auch ersetzen/editieren. Lies die Pfade aus einer Datei aus und starte Sie. Bei LNK kannst auf jeden Fall waitForExit vergessen.
    Das ist meine Signatur und sie wird wunderbar sein!
    ja das meinte ich ja das .lnk dafür nicht geeignet ist
    wollte es erst in die app.cfg machen aber da hab ich keinen platz dafür da sind schon andere variablen drinnen :/ muss ich mir mal überlegen wie ich das umsetze.
    Danke jedenfalls für die Infos
    Also ich bin jetzt so weit dass ich die Daten aus einer csv auslese, dann in ein DataGridView einfüge und dort dann die Programme auswählen kann, ich hab den unten angegebenen Codeteil gefunden, aber habe gerade das Problem dass ich es nicht auf die Reihe bekomme dort den Installationspfad einzutragen

    0=ID 1=Name 2=Installationsdatei
    DataGridSoftware.Rows.Add(sergebniss(0), sergebniss(1), sergebniss(2))

    VB.NET-Quellcode

    1. Dim iRowIndex As Integer
    2. For i As Integer = 0 To DataGridSoftware.SelectedCells.Count - 1
    3. iRowIndex = DataGridSoftware.SelectedCells.Item(i).RowIndex
    4. MsgBox("Row index " & Format(iRowIndex))
    5. 'MsgBox(DataGridSoftware.Item(2, DataGridSoftware.CurrentRow.Index).Value) <- das wäre der plan gewesen klappt aber bei mehrfacher auswahl nicht weil er dann nur das letzt markierte ausgibt aber das so oft wie es markiert wurde
    6. Next