FTDI soll wieder neue Treiber verteilen, die diesmal noch mehr Probleme bereiten! Siehe folgende Links:
Die einfachste Lösung ist natürlich, Windows dazu zu überreden, dass keine
Treiber mehr erneuert werden. Dies kann man so einstellen:
Windows 10: Automatische Treiberinstallation deaktivieren
Das kann aber nicht die Lösung sein. Ich habe einmal auf meinem PC nachgeschaut, wo die Treiberdateien liegen und habe ein kleines Visual Basic Programm geschrieben, das mich warnt, wenn neue FTDI-Treiber eingespielt werden.
Zum Problem, dass FTDI die USB-Kennung verändert siehe Boards: Unvergessene Dokumentationen.
Das Treiberpaket besteht aus den sieben Dateien
Alle diese Dateien befinden sich auch noch einmal in den Verzeichnissen
Die Datei ftd2xx.dll, heißt dort ftd2xx64.dll. Das letzte Stück des Verzeichnisses "...\ftdibus.inf_amd64_54aa41742b0abca5\amd64" wird sehr rechnerspezifisch sein. Ich besitze einen 64-Bit-AMD-Rechner.
Alle diese Dateien der bei mir installierten Treiberversion 2.12.00 haben den Datumsstempel (Änderungsdatum) "09.09.2014".
Ein kleines VB-Programm untersucht den Datumsstempel dieser Dateien beim Start von Windows und schaut nach, ob dieser immer noch "09.09.2014" ist. Hat sich dieser geändert, schlägt das Programm Alarm.
Das ganze Treiberpaket besteht aus weiteren Dateien. Die oben aufgeführten scheinen mir die wichtigsten zu sein.
Sinnvollerweise kopiert man beide Ordner aus dem DriverStore an einen sicheren Ort, aus dem man sie nötigenfalls zurückholen kann. Meine Dateien habe ich unten abrufbar abgelegt.
Leider kenne ich keinen allgemeingültigen Weg, wie man an die Dateipfade kommt. Deshalb ist es notwendig, die Dateipfade zu den Treiberdateien im Programm anzupassen und neu zu übersetzen. Das Programm wurde mit Visual Studio 2012 entwickelt. Spätere VS-Versionen sollten damit klarkommen. Bei früheren Versionen muss man ggf. ein neues Projekt anlegen und die nur die Quelldateien übernehmen. Wichtig ist ein Verwies auf System.Management-Assembly.
Zur individuellen Konfiguration braucht im Projekt nur die Datei ModCheck.vb geändert werden. Zum einen sind die Verzeichnisse zu anzupassen:
'Adjust the following three directories to your own system!
Public SystemDir As String = "C:\\windows\\System32\\"
Public DriversDir As String = "C:\\windows\\System32\\drivers\\"
Public StoreDir As String = "C:\\Windows\\System32\\DriverStore\\FileRepository\\ftdibus.inf_amd64_54aa41742b0abca5\\amd64\\"
Public StoreDir2 As String = "C:\\Windows\\System32\\DriverStore\\FileRepository\\ftdiport.inf_amd64_52a0a468ba08593c\\amd64\\"
und zum anderen muss bei 32-Bit-Systemen der folgende Dateiname angepasst werden:
FtdiFileList.Add(New FileCheck(StoreDir & "ftd2xx64.dll")) '<- Check this filename!
Wichtig: Das Trennzeichen zwischen den Pfad-Teilen ist "\\" (zweimal Schrägstrich rückwärts). Der String wird an eine WMI-Abfrage weitergeleitet. Dort ist "\" das Fluchtsymbol.
Anschließend kann man das Programm übersetzen und die entstandene ausführbare Datei FtdiChk.exe in passendes Verzeichnis kopieren (z.B. "C:\Windows").
Über das Kontext-Menü erstellt man eine Verknüpfung auf die Datei. Diese kopiert man ins Autostart-Verzeichnis ("autostart" im Windows-Suchfeld eingegeben oder hier schauen: Autostart-Ordner in Windows 10 finden). Möchte man, dass man auch dann eine Meldung erhält, wenn kein Fehler gefunden wurde, gibt man den Kommandozeilen-Parameter "-V" hinzu. Das ganze sieht dann so aus:
Wenn alle Dateien das passende Datum haben und die Meldungsoption eingeschaltet ist ("-V") meldet sich das Programm mit
Findet das Programm eine Abweichung erscheint dieser Fehlerbricht:
Das Programm besitzt nur zwei erwähnenswerte Punkte:
Damit das Programm die Dateiprüfung vollkommen ohne eine sichtbare Aktion durchführen kann, erfolgt diese bevor das Hauptformular geladen wird. Hierzu werden die Anwendungsereignisse ausgenutzt.
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
' Für MyApplication sind folgende Ereignisse verfügbar:
'
' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst,
' wenn die Anwendung nicht normal beendet wird.
' UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist.
' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
Partial Friend Class MyApplication
Public Sub Me_Startup(ByVal sender As Object, ByVal e As StartupEventArgs) Handles Me.Startup
Dim mVerbose As Boolean = False
For Each s In From s1 In e.CommandLine Where s1.ToUpper() = "-V" Or s1.ToUpper() = "/V"
mVerbose = True
Next
Dim mResult = FtdiCheck()
If mResult = ProblemType.NoProblem Then
If mVerbose Then
MsgBox("FTDI drivers were checked")
End If
e.Cancel = True ' Everything is ok. No further action required
Else
'Files have been modified, display problem report
End If
End Sub
End Class
End Namespace
Der Zugriff auf die Anwendungsereignisse muss erst über die Projekteigenschaften aktiviert werden:
Windows hat sich strikt geweigert, über die normal zur Verfügung stehenden Funktionen Zugriff auf die Systemdateien zu gewähren. Ich habe dann auch nicht lange weiter gesucht sondern die das WMI (Windows Management Instrumentation) benutzt.
For Each File In FtdiFileList
Dim mSearchString As String = "SELECT * FROM CIM_Datafile WHERE Name = '" & File.FilePath & "'"
Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher(mSearchString)
Dim mManagementObjectCollection As ManagementObjectCollection = searcher.Get
If mManagementObjectCollection.Count <> 1 Then
File.TestResult = ProblemType.MissingFile
mOverallProblem = ProblemType.MissingFile
Else
Dim mFile As New CIM_Datafile(mManagementObjectCollection(0))
If Not mFile.LastModified.StartsWith("20140909") Then
File.TestResult = ProblemType.Modified
mOverallProblem = ProblemType.Modified
End If
End If
Next
Über das WMI bekommt man auch die Programmversionen geliefert. Diese sind jedoch rechtunterschiedlich für die einzelnen Treiberkomponenten, während das Änderungsdatum über gleich ist. Deshalb habe ich dieses zur Prüfung benutzt. Ich hoffe, das reicht.
FTDI-DriverStore auf meinem PC, Stand 2016-2-3
Das VB-Projekt für Visual Studio 2012