Automatsiche Laufwerkserkennung zur Abfrage ob bestimmte Dateien schon existieren!!!Hilfe!!

  • Hallo,

    Ich hab mir ein GUI gebaut , ich habe mehrere Checkboxen erstellt mit verschiedenen Programm namen und es ist dafür da um bestimmte programme auswählen und dann auf de Button kopieren gehen und die markierten Programme sollen von der DVD auf den Rechner kopiert werden.


    Jetzt zum Problem:

    Ich haber mir das aber so gedacht wenn das aktuellste Programm(die version) auf dem Rechner irgendwo schon abgelegt ist soll die Checkbox grau werden was ja auch mit dem befehl $GUI_DISABLE geht. Aber das Problem ist jetzt jeder Rechner hat andere Laufwerksbuchstaben und Festtplatten Buchstaben also dachte ich mir das ich vorher erst herrausfinden muss was für ein Buchtsabe Laufwerk und was für ein Buchstabe Laufwerk ist.Es kann ja auch mehrere Laufwerke und Platten Partitionen geben. Um dann ja abfragen zu können ob die Version vom Programm auf der CD schon irgendwo auf dem PC liegt habe ich das so probiert:


    $var = "cdrom"
    $var2 = "fixed"
    IF FileGetVersion("$var:\*.*\dotnetfx35\setup.exe") = FileGetVersion("$var2:\*.*\dotnetfx35\setup.exe" ) Then GUICtrlSetState ( $checkCN_1, $GUI_DISABLE )


    Doch das haut nicht hin denn wenn ich anstatt $var2 zb den Laufwerksbuchstaben A dorthinschreibe und bei $var den Buchstaben C hinschreibe und das Laufwerk C existiert an meinem Rechner und A gibt es nicht dann wird die Checkbox trotzdem grau gemacht obwohl es nicht die gleichen Versionen sind weil es A ja gar nicht gibt!


    Bitte um schnelle Antwort und hoffentlich eine gute Lösung!

    Danke schon mal im Voraus


    MFG Moritz

  • Hi,

    Deine Pfadlogik stimmt nicht und Dein Funktionsaufruf auch nicht. Du brauchst einen direkten Pfad, oder Du musst nach der Datei suchen.

    Damit sind Deine CB immer grau, da bei beiden Abfragen ein Fehler mit "0.0.0.0" zurück gemeldet wird (s. Hilfe FileGetVersion)

    Deine Bedingung muss z.Bsp so aussehen:
    $var1 = "C"
    $var2 = "A"
    IF FileGetVersion($var1 & ":\install\dotnetfx35\setup.exe") = FileGetVersion($var2 & ":\install\dotnetfx35\setup.exe" ) Then GUICtrlSetState ( $checkCN_1, $GUI_DISABLE )

    ;-))
    Stefan

  • Sind das installiere Programme die du Prüfen willst oder einfach nur so lauffähige? Wenn sie installierst sind kannst du einfach über die registry den uninstall Ordner durchsuchen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Die DVD soll sowas wie eine Update DVD werden.

    Auf der Update DVD liegen dann die installs von programmen wie acrobat reader oder winrar, Auf meiner GUI Oberfläche soll man dann ja auswählen durch checkboxen welche installs auf den PC kopiert und installiert werden sollen und ich wollte jezz überprüfen ob schon irgendwo auf dem PC diese exe (install) vorhanden ist . Aber da das DVD laufwerk meist immer einen anderen Laufwerkbuchstaben zugeteilt hat muss ich ja dann gucken das ich nur die abfrage von der Partitionen und der DVD mache und nicht nacher von Partition zu Partiotion weil es ja um die DVD geht habe hier noch einen versuch aber der funktiniert auch nicht:


  • Mh warum startest die GUi nicht von der CD und installierst auch die Programme direkt von der CD? Dann sparst dir das ganze Prüfen. Ansonsten findest du unter "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" auch alle Laufwerke die auf dem Rechner vorhanden sind.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Die GUI soll ja später auf die CD aber mir geht es ja darum zuprüfen ob ich das programm rüber kopieren muss und installieren oder ob es schon rüber kopiert und installiert wurde? Das ist ja meine Frage

  • Ok dann sollte dir folgendes helfen. Starte die GUI von der CD und mit @ScriptDir bekommst dann den Pfad des CD Laufwerkes. Dann über "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" die restlichen Laufwerke des Rechner auslesen und mit Funktion FileFindFirstFile dann in jedem Laufwerk nach der Datei suchen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Alles klar danke

    aber könntest du mir mal so ein kleines script bauen mit den befehlen und mal zeigen wie genau du das meinst wie du dann die laufwerke abliest und dann genau nur in den laufwerken suchst die da sind?

    • Offizieller Beitrag

    Um zu prüfen, ob bestimmte Programme installiert sind, solltest Du lieber die Registry durchforschen (geht erheblich schneller als auf allen Festplatten/Partitionen zu suchen).
    Wenn Du wirklich suchen musst/willst, schau Dir mal DriveGetDrive an. Du müsstest aber rekursiv (inkl. aller Unterverzeichnisse) suchen. Dazu hat BugFix mal eine Funktion geschrieben. Musst Du mal die Forumsuche benutzen.

  • Moin,

    .Net ist immer auf Systempartition installiert. Deshalb reicht die Überprüfung, ob ein bestimmtes Verzeichnis existent ist ebenfalls.

    [autoit]


    If FileExist (@WindowsDir & "\" & "\Microsoft.NET\Framework\v3.5") =1 Then
    MsgBox (0,""," DotNet 3.5 schon installiert!")
    Else
    MsgBox (0,"","DotNet 3.5 nicht installiert!")
    EndIf

    [/autoit]

    Ansonsten musst Du die Version über die Registry auslesen (HKCU\Software\Microsoft\Windows\CurrentVersion\Net Framework Setup\NDP\v3.5 Version

    ;-))
    Stefan

  • Mit den beiden Befehlen finde ich die Laufwerksbuchstaben gut heraus



    Aber er zeigt mir dann welche Laufwerksbuchtsaben was sind kann ich nicht irgendwie sagen das er diese buchstaben dann an einer bestimmten stelle einfügen soll zb dann in den Befehl hier :


    IF FileExists ("!!!hier einfügen!!!:\*.*\AdbeRdr910_de_DE.exe") Then GUICtrlSetState ( $checkCN_2, $GUI_DISABLE )


    Wenn dort dann an die stelle die fixed laufwerksbuchstaben kommen dann wäre das perfekt geht das irgendwie?


    MFG Moritz

    • Offizieller Beitrag

    Nein, FileExists lässt keine Platzhalter zu. Der Befehl prüft nur, ob eine bestimmte Datei existiert.
    Willst Du eine ganze Festplatte durchsuchen, musst Du das mit einer Schleife machen. Das oben bereits erwähnte FileFindFirstFile und FileFindNextFile sind hier die passenden Stichwörter.
    Du kannst aber, wie bereits von mir erwähnt, auch auf fertige Funktionen zurückgreifen.

  • Wie finde ich am besten den Beitrag von Bugfix?

    weißt du zufällig den titel weil durch 500 beiträge zu suchen das würde dauern?

  • Hallo Moritz.

    Also meine Vorredner/innen haben doch bereits alles geschrieben was Du wissen mußt. Dazu kommt nur, das du selbstständig das ganze was Du nun als Information hast in das Programm einbinden / einarbeiten musst.
    Es sollte auch kein Problem sein da zu helfen, wenn Du zeigst, wie die Einarbeitungsversuche aussehen, denn dann kann man als Helfender besser den Überblick haben.

    BITTE NUTZE DEN SPOILER !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl