joehuaba
Goto Top

Automatische Treiberinstallation mit VB.NET

Hallo Zusammen,


Folgende Problemstellung:
1. Ich habe einen Rechner per Hand neu installiert, da fehlen einige Treiber
2. Ich habe einen Ordner, der verschiedene Gerätetreiber beinhaltet, von verschiedenen Betriebsystemen
3. Dieser Ordner beinhaltet aber nicht nur das eine Rechnermodell, sondern noch viele mehr

Frage:
Ich hätte gerne ein Programm in VB.NET, das folgendes macht:
1. Programm startet
2. Programm sucht nach unbekannten, nicht installierten Geräten auf dem Rechner (quasi wie im Gerätemanager)
3. Programm sucht in der kompletten Ordnerstruktur nach dem passenden Treiber, ohne auf Namensgebung oder dergleichen zu achten.
4. Gerät wird installiert.
5. Programm macht mit dem nächsten Gerät weiter.

Sinn:
Damit ich nicht jeden Treiber bei jedem Gerät von Hand installieren muss,
würde ich gerne meine Treiber einfach nur in den Ordner kopieren,
das Programm starten, und mich gemütlich zurücklehnen.

PS:
Doch, wir haben eine Softwareverteilung, jedoch müssen ab und zu "exotische" Geräte installiert werden,
bei denen es sich nicht rentiert, sie mit in unser System aufzunehmen.


Kann mir jemand weiterhelfen ? face-smile
Edit: Wegen mir auch Powershell face-wink

Content-Key: 277182

Url: https://administrator.de/contentid/277182

Printed on: April 25, 2024 at 17:04 o'clock

Mitglied: 122990
122990 Jul 13, 2015 updated at 09:25:30 (UTC)
Goto Top
Devcon is your friend
https://www.maketecheasier.com/manage-windows-device-drivers-command-pro ...
https://social.technet.microsoft.com/Forums/windowsserver/en-US/a92195e5 ...

Ich hätte gerne ein Programm in VB.NET
Jo, ich will dann nen Kaffee :-P

Gruß grexit
Member: joehuaba
joehuaba Jul 13, 2015 at 09:42:58 (UTC)
Goto Top
Danke für den Tip face-smile
Den Kaffee bekommst du face-wink
Member: joehuaba
joehuaba Jul 13, 2015, updated at Jul 20, 2015 at 06:58:08 (UTC)
Goto Top
Selbst gelöst, danke trotzdem face-smile

Imports System.ComponentModel

Public Class FindDriverAndInstall


    Private Sub FindDriverAndInstall_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        'Startbutton ausblenden  
        btnStart.Visible = False

        'Silent oder nicht silent  
        If System.IO.File.Exists("silent.txt") Then  
            Dim silent As String = System.IO.File.ReadAllText("silent.txt")  
            If silent = "yes" Then  
                'SILENT = JA  
                'Unbekannte Geraete finden und installieren  
                FindFilesAndInstall()
                'Form schliessen  
                CloseFormSilent()
            Else
                'SILENT = NEIN  
                'Unbekannte Geraete finden und installieren  
                lblStatus.Text = ""  
                btnStart.Visible = True
            End If
        Else
            'wenn silent.txt nicht verfuegbar, dann silent installieren  

            'Unbekannte Geraete finden und installieren  
            FindFilesAndInstall()
            'Form schliessen  
            CloseFormSilent()
        End If

    End Sub



    Public Function FindFilesAndInstall()


        'Windows Treiber-Sicherheitsfragen deaktivieren  
        Dim disableDriversignation1 As Process
        disableDriversignation1 = System.Diagnostics.Process.Start("C:\Windows\System32\BCDEDIT.exe", "/Set LoadOptions DDISABLE_INTEGRITY_CHECKS")  
        disableDriversignation1.WaitForExit()
        'Windows Treiber-Sicherheitsfragen deaktivieren  
        Dim disableDriversignation2 As Process
        disableDriversignation2 = System.Diagnostics.Process.Start("C:\Windows\System32\BCDEDIT.exe", "/Set TESTSIGNING ON")  
        disableDriversignation2.WaitForExit()



        'Forma anzeigen  
        Me.Show()
        Me.Visible = True

        'Auslesen wo Treiber liegen  
        Dim folder = System.IO.File.ReadAllText("folder.txt")  

        'Alle Unterordner nach setup.inf durchsuchen und in Array schreiben  
        Dim FindFilesInFolder As String() = System.IO.Directory.GetFiles(folder, "*.inf", IO.SearchOption.AllDirectories)  

        'Zaehlen wie viele Eintraege das Array hat  
        Dim counter = FindFilesInFolder.Count()

        'Progressbar einstellen  
        ProgressBar1.Maximum = counter
        ProgressBar1.Step = 1
        SendMessage(ProgressBar1.Handle, 1040, 3, 0)

        'Zaehler auf 0 setzen  
        Dim index As Integer = 0

        'Maus aktivieren  
        Me.Cursor = New Cursor(Cursor.Current.Handle)

        'Bildschirmaufloesung berechnen  
        Dim desktopSize As Size
        desktopSize = System.Windows.Forms.SystemInformation.PrimaryMonitorSize
        Dim height As Integer = desktopSize.Height / 2
        Dim width As Integer = desktopSize.Width / 2

        'silent ja oder nein   
        Dim silent As String = System.IO.File.ReadAllText("silent.txt")  

        Do
            'Progressbar erhoehen  
            ProgressBar1.Value = index

            'Treiber einbinden und installieren  
            Dim oProcess As Process
            oProcess = System.Diagnostics.Process.Start("C:\Windows\System32\pnputil.exe", " -i -a " + FindFilesInFolder(index))  

            'Bei Fehler weitermachen  
            On Error Resume Next

            ''Silent yes OR no  
            'If silent = "yes" Then  
            '    'Warnmeldungen wegklicken (unsigned Driver)  
            '    Cursor.Position = New Point(width, height)  
            '    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  'Damit wird die linke Maustaste gedrückt  
            '    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)  'Damit wird die linke Maustaste losgelassen  
            'End If  

            'Auf fertigstellung warten  
            oProcess.WaitForExit()

            'Bei Fehler weitermachen  
            On Error Resume Next

            'Zaehler hochsetzen  
            index += 1

            'solange bis index gleich groeße des arrays  
        Loop Until index = counter



        'Windows Treiber-Sicherheitsfragen aktivieren  
        Dim enableDriversignation1 As Process
        enableDriversignation1 = System.Diagnostics.Process.Start("C:\Windows\System32\BCDEDIT.exe", "/Set LoadOptions EENABLE_INTEGRITY_CHECKS")  
        enableDriversignation1.WaitForExit()
        'Windows Treiber-Sicherheitsfragen aktivieren  
        Dim enableDriversignation2 As Process
        enableDriversignation2 = System.Diagnostics.Process.Start("C:\Windows\System32\BCDEDIT.exe", "/Set TESTSIGNING OFF")  
        enableDriversignation2.WaitForExit()



        'Status setzen  
        lblStatus.Text = "Success"  

        'ProgressBar auf gruen setzen  
        SendMessage(ProgressBar1.Handle, 1040, 1, 0)

    End Function



    Public Function CloseFormSilent()

        'reeboot  

        If System.IO.File.Exists("reboot.txt") Then  


            'Reboot.txt auslesen  
            Dim reboot As String = System.IO.File.ReadAllText("reboot.txt")  
            'Reboot  
            If reboot = "yes" Then Shell("shutdown /r /t 2")  
            'Form close  
            Shell("TASKKILL /F /IM AutomaticDriverInstall.exe")  


        Else
            'Form close  
            Shell("TASKKILL /F /IM AutomaticDriverInstall.exe")  
        End If


    End Function



    Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
        'Status setzen  
        lblStatus.Text = "Running"  

        'Button ausblenden und ProgressBar einblenden  
        btnStart.Visible = False

        'Treiber einbinden und installieren  
        FindFilesAndInstall()

        'Progressbar 99% + 1%  
        ProgressBar1.Value += 1

        'Meldung fuer erfolgreich  
        MsgBox("Die Treiberinstallation wurde abgeschlossen.")  
    End Sub



    'Progressbar Farbe aendern  
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer  


    'Mauszeiger_Click  
    Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)  
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4


End Class