1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. misterspeed

Beiträge von misterspeed

  • Warum ist AutoIT "langsam" ?

    • misterspeed
    • 2. April 2017 um 21:41
    Zitat von Lanealine

    achso, dann liegts wohl daran. benutze eine CPU mit 6 Cores / 12 Threads.

    Aber warum ist dann kein Thread voll ausgelastet, wenn die gesamte Auslastung bei 8% ist ? Bei mir geht nicht nur ein Thread auf 100%, sondern alle ein bisschen, sobald ein script activ ist, das nur aus einer while schleife besteht.
    Wird das durch Windows auf mehrere Threasds verteilt ?(Benutze Win7 Pro)


    Nein Windows verteilt das nicht auf mehrere Threads.

    Aber es gibt einen Mechanismus in Windows, welcher die Threads den virtuellen Kernen zuweist. Diese Zuweisung ist nicht permanent, sondern die Threads wechseln ständig und sehr schnell zwischen den verfügbaren Kernen. Grund dafür ist, das im Normalfall Hunderte oder Tausende Threads die CPU Kerne verwenden möchten, aber es kann immer nur ein Thread zur selben Zeit einen Kern verwenden. Wenn du 12 Kerne und 1000 Threads hast müssen die meisten warten bis ein Kern frei ist. Damit jeder Thread etwa gleich oft dran kommt rotieren die Threads permanent zwischen Wartemodus und einem der Kerne durch.

    Der Thread läuft also bei einem 4 Kern Prozessor im Idealfall zu 25% der Zeit auf einem der 4 Kerne. Im Taskmanager schaut das dann so aus, als ob alle Kerne je zu 25% ausgelastet wären. In Wahrheit ist aber jeweils einer der Kerne zu 25% der Zeit zu 100% ausgelastet, die restlichen 75% der Zeit ist der Kern zu 0% ausgelastet. Stimmt natürlich nicht ganz, da noch hunderte andere Threads laufen und sich Zeit auf den Kernen sichern, daher starke Schwankungen im Taskmanager.

  • Warum ist AutoIT "langsam" ?

    • misterspeed
    • 2. April 2017 um 21:25
    Zitat von alpines

    Multiprocessing mittels mehrerer Scripte.


    Müssen noch nichtmals mehrere Scripte sein. Würde auch mit meherere Instanzen des selben Scriptes machbar sein. (Selbstaufruf mit Commandline Parametern)

    Aber vielleicht sollte der TE einfachmal sein Script posten. Dann kann man auch konkrete Tipps bzgl. allgemeinen Performance Optimierungen und bei Bedarf bzgl. Optimierungen durch multiple Prozesse geben.

  • Warum ist AutoIT "langsam" ?

    • misterspeed
    • 1. April 2017 um 22:23
    Zitat von AspirinJunkie

    100% Auslastung wirst du so oder so nicht hingekommen da das ja hieße dass das Skript auf allen cpu-kernen läuft. Da multithreading mit autoit nicht machbar ist, wirst du also z.b. bei einem Vierkerner (ohne hyperthreading) nur auf maximal 25% kommen.

    Und das wird hier vermutlich auch das Problem sein... es wird schlicht nur ein "virtueller Kern" ausgelastet. Bei meiner CPU (Quadcore mit HT) erreiche ich höchstens 12,5% der maximalen CPU Leistung (da nur ein Autoit Thread).

    Die mangelnde Multithreading Fähigkeit von Autoit kann man allerdings ggf. mit multiplen Prozessen umgehen. Sofern sich das Script bzw. die Aufgabe dafür eignet und die paralelle Rechenleistung mehrerer Kerne erforderlich ist würde ich diesen Ansatz verfolgen.

  • Wrapper Fenster ohne Controls/IDs automatisieren. Mit Screenshot.

    • misterspeed
    • 7. März 2017 um 19:44

    Nicht nur Klicks anhand von Koordinaten und co. sollte die allerletzte Wahl sein, sondern GUI Automatisierung im Allgemeinen. Insbesondere dann wenn du recht unzuverlässig mit Tastatur Commandos arbeiten musst. Minimale Designänderungen langen schon und dein Script baut evtl. groben Unfug. Wenn du Pech hast mit fatalen Folgen für das Unternehmen (Datenverlust, falsche Daten, usw.).

    Ich kenne DATEV nicht aber wie bei den meisten größeren Softwareherstellern existieren vermutlich bessere Alternativen zur Automatisierung. Setups können meist per Silent Commandline Parameter automatisch installiert werden, bei komplexeren Programmen mit vielen Installationsoptionen gibt es hin und wieder spezielle unattended Installations config Scripte, welche alle auswählbaren Optionen enthalten und vom Setup ausgelesen werden. (z.B. Windowsinstallation, Oracle Setup,...).

    Selbst wenn nur ein simpler silent Switch vorhanden ist und dadurch dann nur die Standardkonfiguration installiert wird besteht evtl. die Möglichkeit die spätere Programmkonfiguration direkt zu manipulieren. Z.B. durch editieren einer einfache Konfigurationsdatei oder das setzen von Registryschlüsseln. Im Idealfall macht man die Konfiguration / Installation einmal manuell und braucht für weitere Installationen nur noch ein Backup der Konfigurationsdateien einspielen.

    Wenn es dir nicht nur um die Installation und Erstkonfiguration geht sondern um eine generelle Automatisierung des Programms würde ich dir nahelegen zu prüfen ob es eine API, COM Schnittstelle usw. gibt um die gewünschten Softwarefunktionen zu automatisieren. Die Hersteller können in der Regel eine qualifizierte Auskunft darüber geben und dich auf weiterführende Dokumentationen verweisen.

  • Antivirenprogramm des PC's mit AutoIt auslesen

    • misterspeed
    • 16. Februar 2017 um 17:33
    Zitat von alpines

    Es gibt keinen Regschlüssel der festhält welches AV gerade installiert ist.

    Wäre ich mir nicht so sicher. Alle gängigen Virenscanner registrieren sich in Windows als Standardschutzprogramm, damit das Wartungscenter darüber informiert ist ob ein Virenscanner aktiv und aktuell ist. Desweiteren ist es soweit ich weiß möglich via Windows API den Standardvirenscanner für manuelle scans zu nutzen. (Firefox tut dies z.B. nach Downloads)

    Es sollte jedenfalls diverse Möglichkeiten geben den Standardvirenscanner namentlich zu ermitteln.

  • Dragon NaturallySpeaking professionell - AutoIt

    • misterspeed
    • 13. Februar 2017 um 16:19

    Den Hersteller schonmal befragt ob es eine API gibt um das Programm anzusteuern?
    Excel bietet z.B. eine COM Schnittstelle. Andere Hersteller bieten vergleichbares.

    Auf der Webseite wird außerdem ein SDK beworben, das dürfte aber eher nicht das sein, was du suchst (dient dazu eigene Software mit Sprachsteuerung auszustatten).

    Grundsätzlich sehe ich aber nicht viel Nutzen darin ein Programm zu automatisieren, dass Sprache in Windowsbefehle umsetzt. Wenn du eigentlich nur die Windowsfunktion nutzen möchtest kannst du das ja genausogut direkt in Autoit umsetzen. Um etwas auszudrucken gibt es z.B. eine Autoit Funktion. Wenn du eine Sprachintegration wünschst ist das SDK für dich gedacht.

  • DirMove - Verzeichnis verschieben

    • misterspeed
    • 20. Januar 2017 um 21:35

    Ah okay... hatte keine Lust in der Hilfe nachzusehn wofür der Flag steht. :P

  • DirMove - Verzeichnis verschieben

    • misterspeed
    • 20. Januar 2017 um 21:19

    Würd ich auch mal vermuten. Wenn man das manuell im Explorer macht erhält man diese Meldung

    doppelter_ordner.png

    Per commandline erscheint diese Rückfrage

    Seltsamerweise erhalte ich per CMD ein "Zugriff verweigert" wenn ich dem Überschreiben zustimme oder dieses per Parameter /Y erzwinge.

    Du könntest mal in der Hilfe nachsehen ob die dirmove Funktion ebenfalls einen Parameter für Überschreiben besitzt.


    Als Workaround kann natürlich auch immer zuerst ein "02temp" als Ziel verwendet werden, danach das leere "02" löschen und dann "02temp" nach "02" umbenennen/verschieben.

  • Große Dateien einlesen? Alternative zu FileReadLine & FileReadToArray?

    • misterspeed
    • 16. Januar 2017 um 21:08
    Zitat von Oscar

    Das Ganze dauert bei mir etwas über 10 Sekunden (von Festplatte, nicht SSD).

    Nach mehreren Tests denke ich, dass die Ergebnisse evtl. nicht ganz korrekt sind. Mein erster Durchlauf benötigte trotz SSD und flotter i7 CPU ca. 20 Sekunden, bei weiteren Durchläufen 10 und nach ca. 5 Durchläufen nur noch 5 Sekunden. Ich gehe davon aus, dass sowohl Caching innerhalb des Datenträgers als auch Caching durch Windows nach kurzer Zeit eine Verfälschung der Messwerte verursachen.

    Dennoch... selbst 20 Sekunden sind absolut hinnehmbar bei dieser Datenmenge.

    Vermutlich entsteht der Performance Engpass beim Threadersteller erst innerhalb der Schleife bei der Weiterverarbeitung der Daten. Ich könnte mir zum Beispiel vorstellen, dass je nach Zeileninhalt ein Listview befüllt wird. Aus Erfahrung mit eigenen Projekten sei der Tipp erwähnt, dass es bei Listview Befüllung wichtig ist das Neuzeichnen der GUI für die Zeit des Updates mit _GUICtrlListView_BeginUpdate bzw. _GUICtrlListView_EndUpdate zu pausieren.

  • FileOpen und FileRead Sonderzeichen Feindlich?

    • misterspeed
    • 9. Januar 2017 um 18:10

    Der Vollständigheithalber hier ein Skript, welches ich für den Bilderupload auf dem Imagehoster "imgur.com" verwende:

    AutoIt
    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Fileversion=0.1.0.4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    #include <String.au3>
    #include <array.au3>
    #include "_includes\WinHttp.au3"
    #include "_includes\Base64.au3"
    
    
    #cs
    	Syntax:
    			- imgurAPI_V3.exe "Fenstertitel [PID]" "Control-id zur Kommunikation" "Dateipfad zum Bild" // return-wert via comWithParent
    			- imgurAPI_V3.exe "checkAPIlimit" "limitToCheck" // returns 1 wenn limit ausreichend, negative Werte wenn Limit nicht ausreichend oder unbekannt
    
    
    	Rückgabe via comWithParent:
    									- bei Erfolg "imgurID"
    									- im Fehlerfall "error: Upload-Statuscode"
    									- im Fehlerfall "error: Connect-Fehlercode"
    #ce
    
    
    Global $timer = TimerInit()
    Global $hOpen, $hConnect
    Global $connected = False
    Global $userAgent = "screenMTN"
    Global $SSL = 1
    Global $Host = "api.imgur.com"
    Global $uploadEndpoint = '/3/upload'
    Global $ClientID = '***api-key zensiert***'
    
    
    If $cmdline[0] = 2 Then
    	If $cmdline[1]="checkAPIlimit" Then
    		connect($userAgent,$Host)
    		$limitOK = checkAPIlimit($cmdline[2])
    		myExit($limitOK,1)
    	EndIf
    EndIf
    
    
    If $cmdline[0] <> 3 Then exit MsgBox(262144+0,"Fehler ImgurAPI.exe","Ungültige Parameteranzahl!")
    Global $parentWin = $cmdline[1]
    Global $parentControl = $cmdline[2]
    Global $Image = $cmdline[3]
    
    
    If Not WinExists($parentWin) Then Exit MsgBox(262144+0,"Fehler ImgurAPI.exe","ComWindow von screenMTN.exe existiert nicht!")
    If Not FileExists($Image) Then Exit MsgBox(262144+0,"Fehler ImgurAPI.exe",$Image & " existiert nicht!")
    
    
    connect($userAgent,$Host)
    $result = upload($Image)
    myExit($result)
    
    
    Func connect($myuserAgent,$myHost)
    	$hOpen 		=	_WinHttpOpen($myuserAgent)
    							If $hOpen = 0 Then		myExit(-10)
    	$hConnect 	=	_WinHttpConnect($hOpen, $myHost)
    							If $hConnect = 0 Then	myExit(-11)
    	$connected	=	True
    EndFunc
    
    
    Func checkAPIlimit($needed=10,$mode=0)
    	Local $sHeader = "Content-Type: application/x-www-form-urlencoded" & @CRLF & "Authorization: Client-ID " & $ClientID & @CRLF
    	Local $aResult = _WinHttpSimpleSSLRequest($hConnect , 'GET', '/3/credits' , Default, "" , $sHeader , True)
    
    
    	If $aResult = 0 Then
    		ConsoleWrite("Keine Antwort von imgur!" & @CRLF)
    		Return -13
    	Else
    		ConsoleWrite("Header:" & @CRLF & "--------------" & @CRLF & $aResult[0] & @CRLF & "--------------" & @CRLF & "Daten:" & @CRLF & "--------------" & @CRLF & $aResult[1] & @CRLF)
    		$userRemaining = _StringBetween($aResult[1],'"UserRemaining":',',"UserReset":')
    		$clientRemaining = _StringBetween($aResult[1],'"ClientRemaining":','},"')
    		If $userRemaining = 0 or $clientRemaining = 0 Then
    			ConsoleWrite("Parsing gescheitert!" & @CRLF)
    			return -14
    		Else
    			ConsoleWrite("needed: " & $needed & " / user: " & $userRemaining[0] & " / client: " & $clientRemaining[0] & @CRLF)
    			If int($userRemaining[0]) < int($needed) Or int($clientRemaining[0]) < int($needed) Then
    				ConsoleWrite("Limit nicht ausreichend!" & @CRLF)
    				Return -15
    			Else
    				ConsoleWrite("Limit ausreichend!" & @CRLF)
    				Return 1
    			EndIf
    		EndIf
    	EndIf
    EndFunc
    
    
    Func upload($file)
    	Local $sHeader = "Content-Type: application/x-www-form-urlencoded" & @CRLF & "Authorization: Client-ID " & $ClientID & @CRLF
    	Local $sData = getBase64String($file)
    	;Local $aResult = _WinHttpSimpleSSLRequest($hConnect , 'POST', $uploadEndpoint , Default, $sData , $sHeader , True)
    	Local $aResult = _WinHttpSimpleSSLRequest($hConnect , 'POST', $uploadEndpoint , Default, $sData , $sHeader , True)
    	Local $sTemp, $aTemp, $index
    
    
    
    
    	if $aResult = 0 Then
    		Local $fail = @error * -1
    		ConsoleWrite("Fehler: " & $fail*-1 & @CRLF)
    		myExit($fail)
    	Else
    		ConsoleWrite("Header:" & @CRLF & "--------------" & @CRLF & $aResult[0] & @CRLF & "--------------" & @CRLF & "Daten:" & @CRLF & "--------------" & @CRLF & $aResult[1] & @CRLF)
    
    
    		$sTemp = StringReplace($aResult[1],'{"data":{',"")
    		$sTemp = StringReplace($sTemp,"}","")
    		ConsoleWrite($sTemp & @CRLF)
    
    
    		$aTemp = StringSplit($sTemp,",")
    		;_ArrayDisplay($aTemp)
    
    
    		$index = _ArraySearch($aTemp,'"status":',1,0,1,1,1)
    		If $index <> -1 Then
    			$status = StringReplace($aTemp[$index],'"status":',"")
    			If $status = "200" Then
    				$index = _ArraySearch($aTemp,'"id":"',1,0,1,1,1)
    				If $index <> -1 Then
    					$id = StringReplace($aTemp[$index],'"id":"',"")
    					$id = StringReplace($id,'"',"")
    					ConsoleWrite($id & @CRLF)
    				Else
    					ConsoleWrite("Error: ID not found!" & @CRLF)
    					$id = -1
    				EndIf
    			Else
    				ConsoleWrite("Error: Status <> 200!" & @CRLF)
    				$id = -1
    			EndIf
    		Else
    			ConsoleWrite("Error: Status not found!" & @CRLF)
    			$status = -1
    			$id = -1
    		EndIf
    
    
    		ConsoleWrite("--------" & @CRLF & $status & @CRLF & $id & @CRLF & "--------" & @CRLF)
    		if $status <> "200" or $id=-1 Then
    			Return $status
    		Else
    			comWithParent($id)
    			Return 1
    		EndIf
    		;_ArrayDisplay($aResult)
    	EndIf
    EndFunc
    
    
    Func getBase64String($file)
    	Local $hImage	=	FileOpen($Image,16)
    	Local $b64Image	=	_Base64Encode(FileRead($hImage))
    						FileClose($hImage)
    	Local $sData 	=	'type=base64&image=' & replacespecialchars($b64Image)
    
    
    	Return $sData
    EndFunc
    
    
    Func replacespecialchars($string) ; modifieziert für base64->URI
    	Local $aReplace[3][2]=[["+","%2B"],["/","%2F"],["=","%3D"]]
    
    
    	For $i=0 To UBound($aReplace)-1
    		$string = StringReplace($string,$aReplace[$i][0],$aReplace[$i][1],0,1)
    	Next
    
    
    	Return $string
    EndFunc
    
    
    Func comWithParent($sData) ; benötigt Parent GUI mit zugehörigem Kommunikations Control
    	ControlSetText($parentWin,"","[ID:" & $parentControl & "]",$sData,1)
    EndFunc
    
    
    Func myExit($return=1,$mode=0)
    	If $connected Then
    		_WinHttpCloseHandle($hConnect)
    		_WinHttpCloseHandle($hOpen)
    	EndIf
    
    
    	If $return <> 1 Then
    		ConsoleWrite("error: " & $return & @CRLF)
    		if $mode = 0 Then comWithParent("error: " & $return)
    	EndIf
    	ConsoleWrite("time: " & TimerDiff($timer) & @CRLF)
    	If $mode = 1 Then Exit $return
    	If $mode = 0 Then Exit
    EndFunc
    Alles anzeigen

    Da der Bilderupload lediglich ein Teil eines größeren Programmes ist befinden sich im Code noch Funktionen zur Kommunikation mit dem aufrufenden Skript. Ohne Imgur API Key (von mir entfernt) und Kommunikations GUI ist das Script in dieser Form nicht lauffähig. Wer das Script dennoch nutzen möchte kann die betreffenden Code Stellen aber gerne anpassen bzw. sich seinen eigenen API-Key erstellen.

    Die von mir genutzte UDF für die Base64 Konvertierung ist im Übrigen extrem schnell, da Maschinencode verwendet wird. Ich hatte damals mehrere Alternativen verglichen und diese war mit riesiegem Abstand die schnellste. Die Base64 UDF befindet sich im Anhang, woher diese ursprünglich stammte weiß ich nicht mehr.

    Dateien

    base64.au3 10,09 kB – 606 Downloads
  • FileOpen und FileRead Sonderzeichen Feindlich?

    • misterspeed
    • 8. Januar 2017 um 19:00

    Bei rar Dateien handelt es sich um Binärdaten und nicht um Textdaten. Somit ist dein Lesemodus UTF8 hier fehl am Platz, dieser ist lediglich zur korrekten Interpretation von Texten gedacht. Die Datei muss binär eingelesen und auch binär geschrieben werden. Jenachdem wo und wie du die gelesenen Daten dann letzlich hochladen willst müssen die Binärdaten evtl. zunächst noch kodiert werden, damit diese nicht mit der URI Kodierung kolidieren. Hierfür wird in der Regel die "Base64" Kodierung verwendet. Passende UDFs für Autoit sollten bereits vorhanden sein.

    Wikipedia: https://de.wikipedia.org/wiki/Base64

  • Drucken wieso funktioniert das

    • misterspeed
    • 3. Januar 2017 um 22:28

    Ähm sehe gerade, dass der Thread von 2015 ist... Alina sollte sich schämen so einen alten Thread auszugraben :P

  • Drucken wieso funktioniert das

    • misterspeed
    • 3. Januar 2017 um 22:22
    Zitat von Peter S. Taler

    wenn ich mit der Funktion _FilePrint($sFilePath) Druck Befehle ausführe - weshalb kann ich dann ein PDF drucken ohne einen Pdf Reader zur Hilfe zu nehmen?

    Wie schon korrekt erwähnt wurde wird einfach das Windows Standardprogramm hierfür genutzt. Ich gehe davon aus, dass du W10 verwendest, denn unter W7 sollte dies nicht ohne separaten PDF Viewer/Reader möglich sein. W10 kann von Haus aus mit PDF Dateien umgehen und das nicht nur lesend (Edge Browser), sondern es ist auch ein PDF Drucker zum Erstellen von PDF Dateien von Haus aus integriert bzw. installierbar.

    Du kannst also mit der genannten Autoit Funktion alle Dateiformate drucken die entweder vom Betriebssystem oder von einer Drittanbietersoftware gelesen und gedruckt werden können.

  • Warum zeigt VirusTotal meine .EXE als Virus an

    • misterspeed
    • 22. Dezember 2016 um 19:33

    Bei 4 von 55 Falscherkennungen würd ich mir aber ohnehin keinen Kopf machen, zumal davon auch noch 3 völlig unbekannt sind.

    Viel überraschender war für mich ein Verschlüsselungstrojaner der neulich in einem unserer Firmenpostfächer gelandet ist und von keinem einzigen Scanner erkannt wurde, aber dafür ganze Arbeit auf unserem Testsystem geleistet hat.

  • Login mit Winhttp

    • misterspeed
    • 14. Dezember 2016 um 22:54

    Warum verwendest du eigentlich 2 verschiedene Browserkennungen und 2 Sessions? Sehr wahrscheinlich ändert sich beim erzeugen einer Session auch der Variable Wert beider Strings die du aus dem Quellcode der Loginseite kopierst. Deine "Session keys" aus dem Quellcode sind also vermutlich nicht mehr gültig wenn du dein Login Post mit der zweiten Session absendest.

    Ein URL Encode dieser beiden Strings ist vermutlich nicht notwendig, da diese schon korrekt formatiert sein dürften. Meine Anmerkung bezog sich primär auf deine eigenen Daten, sprich Passwort und Benutzername.

  • Login mit Winhttp

    • misterspeed
    • 14. Dezember 2016 um 19:11

    Eine mögliche Ursache könnte sein, dass dein Benutzername oder Passwort Zeichen enthält, welche mit der URI Syntax kolidieren. Das kaufmännische UND "&" wäre z.B. solch ein Zeichen, aber auch etliche andere Zeichen können Probleme bereiten. Deswegen solltest du deine variablen Strings wie Benutzername und Passwort zunächst sauber URL encoden.

    Hier findest du z.B. einen Generator um manuell zu prüfen ob das dein Problem löst:
    https://url-encoder.de/

    Besser wäre es aber wenn du dir eine Funktion schreibst die diese Codierung übernimmt. Eine Tabelle der wichtigsten Zeichnersetzungen findest du z.B. hier:
    http://www.user-archiv.de/url-escape-sequenzen.html

    EDIT:
    Außerdem solltest du Debugging betreiben, sprich lass dir auch mal den Quelltext der Loginseite ausgeben und das Ergebnis deiner RegEx Suche. Evtl. liegt ja auch da der Fehler.

  • globale Variable setzen - auswerten im Unterprogramm

    • misterspeed
    • 13. Dezember 2016 um 22:50
    Zitat von alpines

    Du benutzt eine GUI mit Controls als Textaustausch. Es gibt schon einige UDFs wie man zwischen mehreren Instanzen an Programmen Variablen übergibt und eine Variante davon basiert auf GUIs.

    Es wird ein neues Fenster mit einem bestimmten Titel erstellt (hidden, Titel ist beiden bekannt) und dort wird einfach ein Label oder Input erstellt was den Inhalt der Variable trägt.
    Jetzt kann das 2. Script das Label auslesen (ControlGetText) und sogar manipulieren (ControlSetText).

    Verwende ich in einem meiner Programme auch in leicht abgewandelter Form. Ist zwar eher als Frickellösung anzusehen, aber letztlich sehr einfach zu implementieren und bei weitem nicht so komplex wie andere Verfahren z.B. via TCP.

    Bei mir ist schon eine GUI im Hauptprogramm vorhanden und eine dynamische Anzahl an Childprozessen benötigt eine Kommunikationsmöglichkeit mit dem Hauptprogramm. Ich erstelle hierfür einfach die benötigte Anzahl an unischtbaren labels und übergebe die Control IDs der Labels dann per Kommandozeilenparameter an die jeweiligen Child Prozesse. So hat jeder Child Prozess seinene eigenen Kommunikationskanal.

    Bei mir müssen die Child Prozesse z.B. nach Teilabarbeitung ihr Zwischenergebnis zurückgeben und warten bis das Hauptprogramm mit diesen Daten weitere Dinge erledigt hat und dürfen erst dann ihre Aufgabe fortsetzen/abschließen. Hauptprogramm und Child Prozess warten also gegenseitig aufeinander und tauschen ihren aktuellen Status aus.

  • Fertig Kompiliertes Script dekompilieren?

    • misterspeed
    • 13. Dezember 2016 um 22:30

    Ähm?

    Also nur damit ich das richtig verstehe...

    - Deine Software greift auf eine MySQL DB im Internet zu
    - Der Zweck der DB ist lediglich eine Benutzerverwaltung deiner Software, damit nur registrierte Benutzer die Software nutzen können?

    Die Standardvorgehensweise ist hier wie schon erwähnt wurde eine Web API. Sprich alle Datenbankoperationen werden lokal auf dem Server ausgeführt, deine Software auf dem Clientrechner hat aus Sicherheitsgründen keinerlei direkten DB Zugriff. So kannst du auch verhindern, dass x-beliebige Personen deinen SQL Server im Internet angreifen können, da du den SQL Server im Internet garnicht verfügbar machen musst. Das einzigste was von außen erreichbar sein muss ist deine Web API, welche lediglich von dir definierte Anweisungen entgegennimmt. Fremdzugriff auf die DB ist somit nahezu ausgeschlossen.

    Die Web API selbst nimmt in deinem Fall nur zwei Dinge entgegen:

    1. Neuregistrierungen
    2. Anmeldedaten von bereits registrierten Benutzern

    Optional: Nach erfolgreichem Login alle weiteren Anfragen die du mithilfe deiner DB beantworten möchtest.

    Was die Speicherung der Anmeldedaten in deiner DB anbelangt:

    Man speichert grundsätzlich keine Passwörter in einer Datenbank, weder verschlüsselt noch unverschlüsselt. Stattdessen erstellt der Server (hier deine Web API) einen Hash-Wert des Passwortes und speichert nur diesen in der DB, bzw. prüft bei zukünftigen Logins ob der Hash des angegebenen Passwortes mit dem in der DB identisch ist. Bei dieser Vorgehensweise muss sichergestellt werden, dass die Kommunikation mit deiner Web API verschlüsselt erfolgt, damit das Passwort im lokalen Netzwerk deines Clientrechners nicht mitgeschnitten werden kann. Die Web API sollte also ausschließlich per HTTPS erreichbar sein, desweiteren könntest du in deiner Anwendung noch einen API-Key für die Web API hinterlegen, damit deine Web API Fremdsoftware erkennt und direkt abweisen kann. Dadurch, dass du nur Hash-Werte speicherst kann auch im Falle eines Server Hacks niemand etwas mit deiner DB anfangen... das Passwort ist aus seinerm Hash-Wert in Normallfall nicht ohne enormen Aufwand rekontruierbar (sofern ein sicheres Hash-Verfahren genutzt wurde).

    Mit Autoit hat das nun allerdings nicht mehr viel zu tun. Die Web API Geschichte wirst du in der Regel mit einer Webprogrammiersprache realisieren (z.B. PHP). Sofern du einen Windows Server verwendest käme aber natürlich auch ein Autoit basierter Webserver hierfür in Frage. Aber der Aufwand dafür wäre es wohl nicht wert.

  • FTP file exist problem

    • misterspeed
    • 9. Dezember 2016 um 21:48
    Zitat von autoiter


    @autoBert und @misterspeed haben natürlich absolut recht. Fragen verbieten sich für Anfänger und als Profi muss man einen Thread auch nicht mehr lesen - man weiß sofort Bescheid. Daumen hoch an euch Profis.

    Mir ist das ziemlich wurscht ob jemand Anfänger oder Profi ist. Wenn man etwas nicht weiß oder kann gibt es immer zwei Wege um das Problem zu lösen.

    Einen der Wege sieht man hier, man "schreit" einfach mal "bitteeeeeee hilf mir " oder verkündet traurig "sitze schon seit gefühlt 2 stunden dran " und bekommt dann eine Fertiglösung präsentiert die letztlich nichtmal die eigentliche Aufgabe erfüllt (Datei löschen wenn sie existiert). Das ist aber nicht deine Schuld, sondern die Schuld des Fragestellers, welcher die Aufgabe nicht ausreichend beschrieben hat. Auch wenn ich null Ahnung von Autoit habe sollte man doch meinen, dass ich zumindestens formulieren kann was ich erreichen möchte.

    Der andere Weg wäre, dass man nicht nur das Problem, sondern auch das Ziel vollständig beschreibt und jede auch noch so kleine Hilfestellung dankend annimmt und sich anhand der Tipps selbst weiterbildet und auch selbst eine Lösung erarbeitet. Abschließend präsentiert man seine Lösung und bittet um weitere wertvolle Tipps und Kritik um sich noch mehr Wissen von den Profis anzueignen.

    Unterschied verstanden? Verstanden was ich dem Threadersteller mit meinen Hinweisen zu "Mindestmaß an Autoit Kenntnissen" sagen wollte? Wenn er zur Kategorie 2 der Fragesteller gehören möchte wird er sich über all diese Grundlagen informieren und sich seine eigene FTPfileexist() Funktion schreiben und dann mit uns teilen. Wenn er weiterhin zu Kategorie 1 der Fragesteller gehören möchte wird er auch weiterhin mit Antworten wie meinen leben müssen und vielleicht eines Tages erkennen, dass er so nichts lernt.

  • FTP file exist problem

    • misterspeed
    • 9. Dezember 2016 um 21:04

    Wenn es natürlich nur drum geht die Datei zu löschen wenn sie existiert kann einem ziemlich egal sein ob sie existiert oder nicht, man löscht dann halt einfachmal und wenns nicht klappt war die Datei vermutlich nicht da. Ist aber auch dann keine 100% saubere Lösung, denn das Löschen könnte auch scheitern weil man keine Löschberechtigung hat, weil die Datei gerade gesperrt ist usw.
    Ergebnis wäre dann: Script denkt die Datei ist nicht da, in Wahrheit ist sie das aber sehr wohl und konnte nur nicht gelöscht werden. Evtl. ein Problem ;)

    Die wirklich korrekte Antwort auf die ursprüngliche Frage "Wie prüfe ich ob eine Datei auf einem FTP Server existiert?" ist ja wohl ganz offensichtlich die Funktion _FTP_ListToArray(). Mir ist wirklich nicht klar, warum man hier über all die anderen FTP Funktionen schreibt, wenn es doch eine Funktion gibt die alle Dateien des Serververzeichnisses auflisten kann.

    Eine Funktion ftpfileexists() ist schlichtweg nicht in der Standard UDF enthalten. Aber anhand der oben genannten Funktion kann man sich problemlos eine eigene Funktion mit identischem Verhalten wie fileexists schreiben.

    Dafür sollte man aber schon ein Mindestmaß an Autoit Kenntnissen besitzen und wenigstens wissen was eine If Bedingung, eine Schleife und ein Array ist, wie man Arrays durchsucht, was eine Funktion ist, wie man diese erstellt und was ein Rückgabewert ist. Ich befürchte aber das ist hier leider nicht der Fall. Nunja dann macht man halt einfach Copy&Paste, ersetzt harmlose Funktionen durch Löschfunktionen und hofft dass alles passt. :P

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™