Problem mit Pfadangabe

  • Folgendes Script solch sich nach Ausführung wieder selbst löschen.
    Dies funktioniert auch in Ordnern wie C:\ .
    Allerdings möchte ich es im Autostart haben (Startmenü) und dort kann der Pfad nicht gefunden werden (damit sich das Script nach Ausführung selber löscht).
    Gibt es noch eine Möglichkeit ein Script nur ein einziges Mal laufen zu lassen?

    [autoit]

    ; <AUT2EXE VERSION: 3.2.2.0>

    [/autoit][autoit][/autoit][autoit]

    ; ----------------------------------------------------------------------------
    ; <AUT2EXE INCLUDE-START: C:\Dokumente und Einstellungen\Administrator\Desktop\startmenü.au3>
    ; ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    run("RunDll32.exe shell32.dll,Options_RunDLL 1")
    WinWaitActive("Eigenschaften von Taskleiste und Startmenü")
    send("{TAB 10}")
    send("{RIGHT}")
    ControlClick("Eigenschaften von Taskleiste und Startmenü", "&Startmenü", "Button1")
    ControlClick("Eigenschaften von Taskleiste und Startmenü", "OK", "Button5")
    $time = 10 ;Zeit die bis zum Löschen gewartet werden soll bis das Skript beendet ist. (Empfohlen: 3-5s)

    [/autoit][autoit][/autoit][autoit]

    FileDelete(@TempDir & "\dele.bat")
    FileWrite(@TempDir & "\dele.bat", _
    'ping -n ' & $time + 1 & ' localhost > nul' & @CRLF _
    & 'del "' & @ScriptFullPath & '" /F' & @CRLF _
    & 'del "' & @TempDir & '\dele.bat" /F')
    Run(@TempDir & '\dele.bat', @TempDir, @SW_HIDE)
    Exit

    [/autoit][autoit][/autoit][autoit]

    ; ----------------------------------------------------------------------------
    ; <AUT2EXE INCLUDE-END: C:\Dokumente und Einstellungen\Administrator\Desktop\startmenü.au3>
    ; ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hi, ich glaube das lieg daran, das wenn der Pfad zu lang ist wird er in eine neue Zeile umgebrochen, und dann die Syntax falsch interpretiert. Das passiert bei Batch öfters, aber du must ja nicht unbedingt den Script in den Autostart packen das er sich nach einem Boot startet. Lass doch einfach einen Reg. Eintrag hier erstellen, das wirkt wie Autostart

    [autoit]

    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Eintragsname", "REG_SZ", "C:\Script.exe")

    [/autoit]

    Vinschni

    Einmal editiert, zuletzt von Vinschni (3. April 2007 um 12:49)

  • [autoit]

    run("RunDll32.exe shell32.dll,Options_RunDLL 1")
    WinWaitActive("Eigenschaften von Taskleiste und Startmenü")
    sleep(100)
    send("{LSHIFT}+{TAB}#{RIGHT}")
    ; nachfolgende 2 Zeilen für mich mal auskommentiert, hab klassisches Windows-Menü
    ;~ ControlClick("Eigenschaften von Taskleiste und Startmenü", "&Startmenü", "Button1")
    ;~ ControlClick("Eigenschaften von Taskleiste und Startmenü", "OK", "Button5")
    $time=10
    If fileexists(@TempDir & "\dele.bat") Then FileDelete(@TempDir & "\dele.bat")
    FileWrite(@TempDir & "\dele.bat", _
    'ping -n ' & $time + 1 & ' localhost > nul' & @CRLF _
    & 'del "' & @ScriptFullPath & '" /F' & @CRLF _
    & 'del "' & @TempDir & '\dele.bat" /F')
    sleep(500)
    Run(@TempDir & '\dele.bat', @TempDir, @SW_HIDE)

    [/autoit]


    o.g. geht bei mir.
    versuch einfach mal ohne die controlclicks und mit meinem "rohbau".

    EDIT: fast vergessen, auch mit langen pfaden gabs keine probleme bei mir.
    gruss exberliner

    Einmal editiert, zuletzt von ExBerliner (3. April 2007 um 23:13)

  • Danke, werde ich mal testen.
    Habe jetzt erst die Antworten gesehen, dachte ich bekomme eine Benachrichtigung...
    Jedenfalls möchte ich das Script mit nLite in eine CD einbauen und da geht das erst wenn der Desktop vollständig geladen wurde.
    Deswegen sollte es im Startmenü (Autostart) liegen, RunOnce läuft nämlich schon früher beim ersten Start und kann so die Startleiste nicht aufrufen.
    Es soll nämlich das moderne Startmenü eingestellt werden, nLite ist da irgendwie zu verbuggt zu, deswegen diese Notlösung.
    Wo könnte ich denn Logzeilen finden bzw. wie welche erzeugen?

    Einmal editiert, zuletzt von DaSilva (3. April 2007 um 23:44)

  • tzzz, ich habe einen entscheidenden faktor nicht berücksichtigt, sorry.

    du bekommst die fehlermeldung nur, wenn du versuchst die datei im autostart-ordner zu löschen. und hier und sonst nirgendwo liegt auch der knackpunkt. umlautproblem !!!!

    bei mir kommt dann die besagte fehlermeldung:
    Das System kann den angegebenen Pfad nicht finden.

    es wird versucht mit folgendem befehl zu löschen:
    del "C:\Dokumente und Einstellungen\Administrator\Startmen³\Programme\Au
    tostart\test.au3" /F

    wir befinden uns hier ja unter "DOS"; und da wird das ü anders interpretiert. nämlich mit "³".

    als lösung hätte ich jetzt nichts auf die schnelle.
    aber hier sind ja etliche profis, da kommt sicher noch DIE lösung.

    gruss exberliner

    • Offizieller Beitrag

    Hallo und herzlich :willkommen:

    Ja, es gibt ne lösung undzwar mit FileGetShortName...

    also so ungefair:

    Spoiler anzeigen
    [autoit]

    _SelfDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Func _SelfDelete($iDelay = 50)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & FileGetShortName(@ScriptFullPath) & '" > nul' & @CRLF _
    & 'if exist "' & FileGetShortName(@ScriptFullPath) & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir,@SW_HIDE)
    EndFunc

    [/autoit]

    Mfg Spider

    Edit: langsam wird gruselig... pee war schon wider schneller :hm:
    Edit peethebee: Dafür war Gta schon wieder ausführlicher :keks:

  • Danke, so funktioniert es!

    Könnte man noch folgende Funktionen einer Batchdatei in das Script einbauen?

    Danke.

  • Ja,
    für 'deldir.exe' DirRemove(),
    für 'delfile.exe FileDelete(),
    für 'move' DirMove(),
    und für 'REG DELETE' RegDelete()
    benutzen.

    P.S. Öfter mal die Hilfe wälzen ;)

    Einmal editiert, zuletzt von JanSchmidt (4. April 2007 um 11:23)

  • So müsste das also funktionieren?
    Habe nämlich gerade kein Testsystem zur Verfügung...

    [autoit]

    DirRemove ("%systemdrive%\Programme\ComPlus Applications")
    DirRemove ("%systemdrive%\Programme\Uninstall Information")
    FileDelete ("%systemdrive%\Dokumente und Einstellungen\All Users\Startm~1\Micros~1.lnk")
    FileDelete ("%systemdrive%\Dokumente und Einstellungen\All Users\Startm~1\Progra~1.lnk")
    FileDelete ("%systemdrive%\Dokumente und Einstellungen\All Users\Startm~1\Window~1.lnk")
    DirMove ("%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Intern~1.lnk", "%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Internet Explorer.lnk")
    DirMove ("%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Outlok~1.lnk", "%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Outlook Express.lnk")
    DirMove ("%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Remote~1.lnk", "%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Remotedesktopunterstützung.lnk")
    DirMove ("%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Window~1.lnk", "%systemdrive%\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Windows Media Player.lnk")

    [/autoit]
  • Ich würde "%systemdrive%\..." gegen @HomeDrive & "\..." austauschen, aber im Prinzip schon.

  • Dann müsste mein folgendes Script jetzt ja alles machen was ich mir wünsche.
    Danke für die schnelle und kompetente Hilfe!

    [autoit]

    ; <AUT2EXE VERSION: 3.2.2.0>

    [/autoit][autoit][/autoit][autoit]

    ; ----------------------------------------------------------------------------
    ; <AUT2EXE INCLUDE-START: C:\Dokumente und Einstellungen\Administrator\Desktop\startmenü.au3>
    ; ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    run("RunDll32.exe shell32.dll,Options_RunDLL 1")
    WinWaitActive("Eigenschaften von Taskleiste und Startmenü")
    send("{TAB 10}")
    send("{RIGHT}")
    ControlClick("Eigenschaften von Taskleiste und Startmenü", "&Startmenü", "Button1")
    ControlClick("Eigenschaften von Taskleiste und Startmenü", "OK", "Button5")
    $time = 10 ;Zeit die bis zum Löschen gewartet werden soll bis das Skript beendet ist. (Empfohlen: 3-5s)

    [/autoit][autoit][/autoit][autoit]

    DirRemove (@HomeDrive & "\Programme\ComPlus Applications")
    DirRemove (@HomeDrive & "\Programme\Uninstall Information")
    FileDelete (@HomeDrive & "\Dokumente und Einstellungen\All Users\Startm~1\Micros~1.lnk")
    FileDelete (@HomeDrive & "\Dokumente und Einstellungen\All Users\Startm~1\Progra~1.lnk")
    FileDelete (@HomeDrive & "\Dokumente und Einstellungen\All Users\Startm~1\Window~1.lnk")
    DirMove (@HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Intern~1.lnk", @HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Internet Explorer.lnk")
    DirMove (@HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Outlok~1.lnk", @HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Outlook Express.lnk")
    DirMove (@HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Remote~1.lnk", @HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Remotedesktopunterstützung.lnk")
    DirMove (@HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Window~1.lnk", @HomeDrive & "\Dokumente und Einstellungen\Administrator\Startm~1\Programme\Zubehör\Windows Media Player.lnk")

    [/autoit][autoit][/autoit][autoit]

    _SelfDelete()

    Func _SelfDelete($iDelay = 50)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & FileGetShortName(@ScriptFullPath) & '" > nul' & @CRLF _
    & 'if exist "' & FileGetShortName(@ScriptFullPath) & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir,@SW_HIDE)
    EndFunc
    Exit

    [/autoit][autoit][/autoit][autoit]

    ; ----------------------------------------------------------------------------
    ; <AUT2EXE INCLUDE-END: C:\Dokumente und Einstellungen\Administrator\Desktop\startmenü.au3>
    ; ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit][/autoit]
  • ?( Was wird nach 50 Sekunden gelöscht?

    Edit : Ach so, der Parameter kann ja angepasst werden.

    Einmal editiert, zuletzt von JanSchmidt (4. April 2007 um 13:54)

  • Habe es gerade getestet und noch ein Problem festgestellt:

    Beim ersten Start ist irgendwie der Button "Übernehmen" schon aktiv ohne etwas verändert zu haben.
    Deshalb geht das Script nicht weiter.
    Natürlich könnte man einfach TAB 10 durch TAB 11 ersetzen aber dann könnte es immer noch Probleme geben.
    Gibt es vielleicht eine sichere Methode um auf den Reiter "Startmenü" zu kommen?
    Danke

    EDIT: Vielleicht so?

    [autoit]

    ControlCommand ("Eigenschaften von Taskleiste und Startmenü","Startmenü",12320,"Tabright","")

    [/autoit]

    Klappt nur leider nicht. Der stellt irgendwas anderes um ohne auf den Reiter "Startmenü" zu springen.

    Kennt da keiner eine bessere Lösung? Danke.

    2 Mal editiert, zuletzt von DaSilva (6. April 2007 um 02:01)