Beiträge von autoiter

    nur ergänzend zur Pause Funktion (habe das auch von hier), bzw, wie das ohne include machbar ist:


    Die Lösung mir dem AT allein scheidet aus.. Wenn ich bei meinem Win8.1 eingebe:

    Code
    at 18:18 call "C:\Users\User\AppData\Local\Temp\scratch.cmd", dann erhalte ich die Meldung:
    
    
    Der AT-Befehl ist veraltet. Verwenden Sie stattdessen "schtasks.exe".
    Die Anforderung wird nicht unterstützt.


    Also könnte ich aber beides schreiben einen für AT und einen schtasks.exe. Allerdings lohnt sich das nur, wenn man auch einen Task für die aktuelle Minute machen kann. AT unterstützt nur h:min. Und bis zu 59 Sekunden auf das löschen zu warten, ist schlechter als eine Uninstaller Verknüpfung.
    Ich probiere das noch aus. Aber nicht sofort. Ich muss erst einmal eine XP Maschine erstellen..


    Aber wahrscheinlich ist das alles Quatsch. Es ist wohl ein guter Kompromiss, das System abzufragen und entweder einen Task mit schtasks.exe zu erstellen oder eine Verknüpfung zu erstellen, wenn XP im Einsatz ist. Gibt es eh nicht mehr lange ;)

    Danke für eure Ratschläge :thumbup:


    UEZ
    Genau das hatte ich schon probiert. Allerdings wird die batch gar nicht gestartet, wenn der bitdefender läuft. In der Richtung brauche ich also nicht weiter forschen. :(


    @gmmg
    Klar, das könnte ich tun. Ich würde mir für mich aber gar nicht die Mühe machen, sondern wollte das Programm weitergeben. Ist zwar ein absolut randständiges Ding, und wahrscheinlich auch nicht die Mühe wert, aber interessant ist es doch.


    Ich habe mir auch gedacht, ich könnte immer prüfen, ob die scratch.cmd schon da ist, wenn nicht, sollte sie ins Temp schreiben. Dann wäre das direkte deinstallieren immer möglich, wenn die Datei nicht gerade erstellt wurde. Wenn sie gerade erstellt wurde, dann würde ich nur einen Link zur scratch.cmd erstellen, mit der das Programm gelöscht werden könnte..


    Aber das ist natürlich keinesfalls perfekt. Deshalb muss ich erst einmal dem Vorschlag von misterspeed nachgehen. Weil ich an anderen Sachen weitergemacht habe, konnte ich nicht nach den AT tasks schauen. Das schaue ich mir aber noch an.

    Aber selbst wenn das mit Bitdefender so klappen sollte ist das natürlich keine Garantie, dass es immer so klappt. Jeder Virenscanner arbeitet anders, wenn es um die Verhaltensanalyse geht, da kann schon ein Update reichen um eine vorher funktionierende Methode ebenfalls zu blockieren.

    Ja, das bleibt ein Problem. Hätte ich nicht den bitdefender, hätte ich dieses Problem nicht einmal bemerkt. Bei AVG und Antivir klappt es (momentan).


    Außerdem habe ich mich im Forum umgeschaut, wegen dem Taskmanager und da stand in einem Thread, dass der Weg, der dort beschrieben wird nur ab win7 vielleicht ab vista ginge. Ich denke mir, bei so vielen Problemen lohnt sich die Arbeit einfach nicht..


    Auf meine Weise ist es nicht elegant, aber ich habe wenigstens die Gewissheit, dass es funktioniert.

    Hier noch meine Rückmeldung.
    Mein Virenscanner ist recht hartnäckig. Es klappt bei mir nicht einmal, wenn ich die cmd per fileinstall mit dem Programm mitliefere. Daher erstelle ich jetzt nach dem Schreiben nur noch eine Verknüpfung auf dem Desktop um Verwirrungen zu vermeiden. Die muss der User selbst ausführen und Virenscanner bleiben sicher still.


    Danke nochmal. :)

    Jap, es ist mein Bitdefender Antivirus, der das Verhalten blockiert hat! Ich hatte ihn schon auf Spielmodus (mehr bietet er nicht an). Dabei blockiert er wohl alles, meldet es nur nicht mehr. (Macht eigentlich Sinn, ich hatte aber keine Ahnung). Nach dem Abschalten des Spielemodus hat er mir gemeldet, dass ein verdäschtiges Verhalten unterbunden wurde.


    Ich werde mal testen wie es ausschaut, wenn ich die cmd vom Programm erstellen und ein weiteres Script starte, das wiederum die scratch.cmd ausführt.


    Danke schonmal :thumbup:

    Verdammt. eben habe ich das mal in virtuellen Maschinen mit Win 7 (x86 und x64) gestestet. Bei beiden Systemen klappt meine suicide.exe, in der nur der Code steht, wie du ihn auch hast, Oscar. Dort klappt das!
    Wahrscheinlich geht es da auch ohne den eingefügten Backslash.


    Könnte mir jemand mit Win 8.1 x64 den Gefallen tun das Script mal zu einer exe kompilieren, um zu sehen, ob diese bei Ausführung gelöscht wird? Das wäre sehr nett.


    _SelfDelete()


    Func _SelfDelete()
    Local $cmdfile
    FileDelete(@TempDir & "\scratch.cmd")
    $cmdfile = ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.cmd'
    FileWrite(@TempDir & "\scratch.cmd", $cmdfile)
    Run(@TempDir & "\scratch.cmd", @TempDir, @SW_HIDE)
    EndFunc

    Das Programm beendet sich nach einigen Augenblicken. Danach Passiert nichts weiter.


    Wenn ich dann manuell die scratch.cmd starte (anklicke), wird das Programm auch gelöscht. Es funktioniert wie gesagt auch, wenn die scratch.cmd nicht in der gleichen Sitzung geschrieben werden musste, sondern schon im Ordner ist und nur vom Programm ausgeführt werden muss..


    Also scheint das Programm die .cmd nicht sofort nach dem Schreiben, starten zu können. An dieser Stelle liegt das Problem. Ich habe aber keine Ahnung, was es zu ändern gilt :whistling:


    Also bei dir gehts Oscar?!? Könnte es an meinem System liegen? Ich nutze Win 8.1 x64.
    Das Script aus deinem vorletztem Eintrag funktioniert bei mir nur bei einem nicht kompiliertem Script. Genau das als Script kompiliert geht nicht.
    Wenn ich Zeile 5 lösche, dann klappt es bei der zweiten Ausführung: FileDelete(@TempDir & "\scratch.cmd") Entspricht genau der Beobachtung mit meinem Programm.

    Ach sorry, das habe ich beim Schreiben vergessen.


    Nein, das war das erste, was ich korrigiert habe. Lustigerweise ging es im Script sogar ohne die Backslashs.


    Dann habe ich noch den Del Parameter /F ausprobiert und einen timeout in die batch schreiben lassen.


    Das lief dann so: Programm führt batch aus, beendet sich, nach zehn Sekunden startete der erste Durchgang löschen. Hat aber alles nicht funktioniert.



    Funktioniert das denn bei anderen mit kompilierten exe Dateien?

    Hi Leute,


    ich hätte gerne für mein Script eine Deinstallationsroutine. Ich habe einen "Programm entfernen" Button. Wenn der gedrückt wird, dann werden die ini, Tempfiles und schließlich das Programm selbst gelöscht.
    Auf der Suche nach einer "Script-löscht-sich-selbst-Anleitung" bin ich schnell fündig geworden.


    Da gibts ja die _SelfDelete udf, die schon in Scite ist.
    Func _SelfDelete()
    Local $cmdfile
    FileDelete(@TempDir & "scratch.cmd")
    $cmdfile = ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & 'scratch.cmd'
    FileWrite(@TempDir & "scratch.cmd", $cmdfile)
    Run(@TempDir & "scratch.cmd", @TempDir, @SW_HIDE)
    EndFunc
    Ich rufe die Funktion einfach in meiner Aufräumaktion auf. Das funktionierte wunderbar, bis ich das Script kompiliert habe. Als ich testweise versuchte das Programm zu entfernen, wurde nur die scratch.cmd erstellt, aber nicht ausgeführt bzw. löscht nicht erfolgreich ?(
    Nach ein paar Tests habe ich festgestellt, dass es nicht funktioniert, wenn die scratch.cmd vom laufenden Programm erstellt wird. Wohl aber klappt das löschen, wenn ich eine bestehende scratch.cmd nicht lösche, sondern ausführe.
    So prüfe ich jetzt immer bei Programmstart, ob die Datei besteht, wenn nicht wird sie erstellt..


    Das geht erst einmal, ist aber natürlich nicht so dolle. Wie geht ihr denn beim Programm entfernen vor? Woran könnte es liegen, dass es mit der Function nicht klappt?


    Ich habe schon eine Pause in die erste Zeile der cmd geschrieben, damit das Programm beim Löschversuch beendet ist.

    Nun habe ich doch noch eine Frage, die nicht gleich ist, aber sich doch auf diese Texte bezieht.


    Ich lade eine Liste mit InetGet herunter, die ich dann bearbeite. Es ginge ja auch mit InetRead. Ich weiß aber nicht, was besser ist. Wenn ich nun eine lange Liste habe und nur die ersten 100 oder 200 Zeilen brauche, wäre es am sinnvollsten, ich speicherte nur diese Anzahl Zeilen, oder kürze den vorhandenen Text. Danach wären weitere Schritte schneller.


    Wie macht man das?


    War dumm. Bitte vergesst das.. ;)

    Das Tut hatte ich mir angesehen. Da du meinst, ich finde meine Antworten da, schaue ich mir das noch mal an.
    Ich muss allerdings zugeben, dass ich mit Arrays noch grundsätzliche Probleme habe. Z.B. von zwei unterschiedlichen Dateien/Arrays einzelne Spalten in eine neue Datei/Array zu schreiben, kriege ich immer noch nicht hin...
    Als ich ausprobiert hab array1[$i][0] <> array2[$i][0] hat das nicht funktioniert..
    Kann sein, dass ich etwas brauch. ICh melde mich wieder bei euch.

    Hey Leute!


    Ich würde gerne wissen, wie man vorgeht, wenn man Dateien oder Arrays vergleicht und wie man sie zusammenführt (wie der Titel schon sagt :D ).
    Also fogendes Szenario hab ich hier:


    Eine kleine Datei mit einer ID und Infos
    1234 TAB 1 TAB Info1
    1235 TAB 2 TAB Info2
    1376 TAB 3 TAB Info3


    und eine große Datei mit mit unter anderem den gleichen IDs. Manchmal fehlt aber eine ID.
    1221 TAB 1 TAB InfoA
    1222 TAB 2 TAB InfoB
    1235 TAB 3 TAB InfoC
    ........ TAB 4 TAB InfoD
    ........ TAB 5 TAB InfoE
    1375 TAB 11 TAB InfoF
    1376 TAB 12 TAB InfoG


    Ich würde jetzt gerne die Infos der ersten Datei mit denen der zweiten Datei zusammenführen.


    In diesem Bsp.:
    Info1 TAB Keine Infos vorhanden
    Info2 TAB InfoC
    Info3 TAB InfoG


    Es handelt sich um durch Tabs getrennte Daten. Ich möchte am Ende in einer GUI z.B. Info2 und InfoC in angeben können. Dafür müsste ich aber erst diesen Schritt bewältigen. Bisher habe ich nichts gefunden, das mir mit meinem geringen Kenntnisstand so weit geholfen hat, dass ich die Lösung sehen würde.


    Ich muss dazu sagen, ich erstelle die Dateien in einigen Schritten vorher und könnte da schon anders vorgehen, wenn es angebracht wäre.

    Danke Leute,
    ich finds phänomenal, wie kurz man den Code halten kann (wenn man sich richtig auskennt). Ich habe mittlerweile einen riesigen Codehaufen, der wahrscheinlich zur Hälfte unnötig ist :D
    @ AspirinJunkie
    Danke für die Erklärung. Mir war der Unterschied bisher nicht klar.


    Grüße autoiter

    Hey danke dir.
    Sorry für die späte Meldung. Um ehrlich zu sein, hatte ich das nicht ganz kapiert, bzw falsch gemacht und meine Liste blieb immer leer. Dann habe ich mir erst einmal Array und Listview Tuts angeschaut. Weil ich nicht jedes Mal nerven wollte und noch genug Hilfe bekommen möchte ;)
    Mein Array kann unterschiedlich groß sein. Daher mache ich das so:
    For $i = 0 To UBound ($allinfo, 1) - 1
    GUICtrlCreateListViewItem($allinfo[$i][0], $gui_zaplist)
    _GUICtrlListView_AddSubItem($gui_zaplist, $i, $allinfo[$i][1], 1, 1)
    Next
    Auf den Klick reagiere ich dann so:
    If _GUICtrlListView_GetSelectionMark($gui_zaplist) <> -1 Then
    If $listview_click <> _GUICtrlListView_GetSelectionMark($gui_zaplist) Then
    $listview_click = _GUICtrlListView_GetSelectionMark($gui_zaplist)
    InetGet ("http://" & $IP & "test/" & $allinfo [$listview_click][0], "", 1, 1)
    Allerdings habe ich das nur abgeschaut und da es sofort funktioniert hat.. Wie man sieht benutze ich nun doch die erste Spalte. Aber jetzt ist mir klar, dass das relativ Wurscht ist, weil ich ja nur $allinfo [$listview_click][1] oder [2] usw. setzen müsste.
    Also nochmal danke!

    Hi Leute,
    kann mir jemand erklären, wie ich ein Textfile in die GUI bekomme?
    Wenn ich mir die Hilfe zu GUICtrlCreateListViewItem anschaue, sehe ich schon, wie ich einzelne Einträge in eine Spalte in die Listview bekomme. Aber ich verstehe nicht, wie ich einen ganzes, unter Umständen unterschiedlich langes Textfile in die Listview übernehmen kann..
    Eigentlich habe ich schon ein Array, das ich gebildet habe. Schön wäre es dieses direkt zu nutzen um es in der GUI darzustellen. Aber ich würde auch gerne wissen, wie ich Textfiles in eine Listview kriege. Ich würde mich freuen, wenn mir das einer zeigen und erklären könnte.


    Explizit möchte ich von einem Array, das sowas enthält
    AAAA aaaa
    BBBB bbbb
    CCCC cccc


    AAAA in der Listview anzeigen und wenn es angeklickt wird aaaa in einem Linkaufruf verwenden. Für letzteres habe ich selbst noch keinen Hirnschmalz verwendet. Allerdings kam ich schon beim Lesen des Textfiles nicht weiter.


    Grüße autoiter

    Ah, danke. Ich hab mal ein Update gemacht NewVersionTester.


    Friesel
    Ich kam noch nicht zum Tut. Das werde ich noch machen. Aber es kam mir zu viel dazwischen. Meist habe ich mit Texten zu tun und über kurz oder lang möchte ich die auch beherrschen. Deinen Code konnte ich allerdings nicht einfach anwenden. Das klappt nicht. Siehst du den Fehler?

    Dim $Data
    _FileReadToArray(@AppDataDir & "\Testprojekt\Test.txt",$Data)


    _ArrayDisplay($Data, "Vor dem Bereinigen") ;Einmal vorher roh anzeigen


    $bData= StringRegExp($Data, ".+? .+? (.+)", 3) ; Ab hier geht nix mehr..


    _ArrayDisplay($bData, "Nach dem Bereinigen") ;Nochmal anzeigen ------- Es kommt nie zu dieser zweiten Darstellung.
    _ArrayDelete($bData, 0)
    _FileWriteFromArray(@AppDataDir & "\Testprojekt\Test.txt", $bData)


    Mit chesstigers Weg konnte ich mein Problem schon lösen. Allerdings lasse ich den Thread erst einmal noch offen, weil ich vielleicht neue Fragen klären kann.


    Grüße autoiter

    Danke euch für die Hilfe. Leider war ich jetzt ständig mit anderen Sachen beschäftigt und habe nur den Code von chesstiger ausprobiert. Funzt. Aber boah, ich steh sowas vom an Anfang. Ich hab mich erstmal gewundert wo FileReadToArray zu finden ist. In der Funktionsreferenz war es nicht zu finden. Aber Aha! Es gibt auch userdefined Functions :D
    Ich setze mich heute Abend ausführlich damit auseinander und wollte nur mal melden, dass eure Hilfe nicht ins Nirvana gegangen ist.


    Friesel
    Ja, Hammer wie kurz der Code ist und danke für den Tutorial Link. Lustigerweise hatte ich den Link auch schon in der Shoutbox bekommen und aufgerufen, später aber geschlossen und nicht wiedergefunden.. Das schaue ich mir auf jeden Fall an.


    Grüße