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

  • Quelltext auslesen

    • misterspeed
    • 6. April 2018 um 21:02

    Die Dropdown Liste mit den Betriebssystemen taucht scheinbar nicht einfach so im Klartext im Quellcode auf. Vermutlich wird das per JS dynamisch nachgeladen.

    Du kannst aber z.B. in Firefox einfach per Rechtsklick auf das Dropdown und dann auf "Element untersuchen" gehen um das Objekt genauer zu betrachten, dann erhältst du eine Ansicht wie oben verlinkt.

  • Access ADODB Connection

    • misterspeed
    • 6. April 2018 um 18:16

    Mal so nebenbei... was genau ist dein Ziel, bzw. was erhoffst du dir davon einen anderen User für den Schreibzugriff zu verwenden?

    Du willst wohl verhindern, dass User Max.Muster manuelle Änderungen an der DB vornehmen bzw. vielleicht auch alle Daten aus der DB sehen kann, wenn er denn möchte.

    Wenn du jetzt aber einen anderen allgemeinen Schreibberechtigten User dafür verwendest kommst du nicht drum herum die Zugangsdaten im Script zu speichern.

    Das ist noch viel schlimmer als den oder die User direkt zu berechtigen, da du so bei Mißbrauch nicht einmal mehr feststellen kannst wer genau diesen allgemeinen Account nun benutzt hat.

    Die Zugangsdaten können durch Dekompilieren, ggf. durch einen Hex Editor oder durch diverse Sniffingtools mitgeschnitten werden. Davon ab bedeutet eine Änderung der Zugangsdaten auch automatisch, dass du die Scriptinstanzen auf den Nutzerrechnern aktualisieren musst.

    Sicherer ist es das schreibende Script mit den allgemeinen Zugangsdaten vom Userscript zu separieren.

    Das schreibende Script liegt irgendwo auf einem Server, wo der User keine Zugangsberechtigung hat, genauso wie er keine Zugangsberechtigung zur DB Datei hat.

    Das Userscript läuft auf dem Rechner des Users und kommuniziert mit dem Serverscript, z.B. über TCP und eine von dir definierte API. Der User kann also nix weiter tun als die von dir vorgesehenen Aktionen an das Serverscript zu senden. Alles andere wird verworfen.

    Wenn du protokollieren willst welcher User was an das Serverscript gesendet und letztlich indirekt an der DB geändert hat kannst du dies problemlos über das Serverscript tun. Hätte sogar den Vorteil, dass die Aktionen evtl. sogar granulär rückgängig gemacht werden können und der Verwantwortliche für die Fehlnutzung entsprechend geschult werden kann.

  • Prozess startet ohne GUI

    • misterspeed
    • 5. April 2018 um 21:17
    Zitat von mcbaldrian

    als ich habe einen dienst in Audit geschrieben ( läuft unter system ) der einen Prozess ( Fremdsoftware ) überwacht ob er läuft oder nicht.

    Wenn dieser Prozess ( Fremdsoftware ) gestartet wird soll eine anderes Programm ( auch Autoit mit GUI ) gestartet werden.

    Das Problem ist jetzt das mein Programm startet aber nur der Prozess ich sehe keine GUI. Starte ich mein Programm direkt kein Problem GUI da alles gut.

    Ja dann wird es eben wie von mir vermutet sein. Dein Überwachungsdienst läuft als User SYSTEM, alles was der Dienst tut passiert ebenfalls als User SYSTEM, somit läuft letztlich auch dein GUI Script auf dem SYSTEM Account und nicht auf dem Account des angemeldeten Benutzers. Die GUI ist da, aber du siehst sie eben nicht, weil du nich der User SYSTEM bist, bzw der User SYSTEM garkeinen aktiven Desktop hat auf dem irgendwas grafisches angezeigt werden könnte.

    Lektüre zum Thema:

    https://www.howtogeek.com/school/using-w…-a-pro/lesson8/

    Zitat

    What Are Services Exactly?

    Windows services are a special type of application that is configured to launch and run in the background, in some cases before the user has even logged in. They can be configured to run as the local system account. Services are designed to run continuously in the background and perform system tasks, like backing up your computer or running a server process that listens on a network port.

    Back in the Windows XP days, services could be configured to run interactively and run alongside the rest of your applications, but since Vista, all services are forced to run in a special window session that can’t interact with your local desktop. So a service that tries to open a dialog box or show you a message won’t be allowed to do so.

    Zitat

    The Services Panel

    Windows has always used the Services panel as a way to manage the services that are running on your computer. You can easily get there at any point by simply hitting WIN + R on your keyboard to open the Run dialog, and typing in services.msc.

    ...


    You might notice the option for “Allow service to interact with desktop”, which we mentioned earlier – by default, services are not allowed to access your desktop unless this box is checked, and this checkbox is really only there for legacy support.

    But just checking that box doesn’t immediately give them access – you would also need to make sure that the NoInteractiveServices value in the registry is set to 0, because when it is set to 1, that checkbox is ignored and services can’t interact with the desktop at all. Note: in Windows 8, the value is set to 1, and interactive services are prohibited.

    Services aren’t supposed to be interactive because all windows exist in the same user terminal with access to common resources like the clipboard, and if they are running along with other processes there could be an issue where a malicious application running in a normal user process could attempt to gain more access through a service, and considering that services run as the local system account, that probably isn’t a good thing.


    Alles anzeigen
  • Access ADODB Connection

    • misterspeed
    • 5. April 2018 um 17:27

    Ja ist wohl möglich laut Microsoft:

    https://docs.microsoft.com/en-us/sql/ado/…-ado-connection

  • Prozess startet ohne GUI

    • misterspeed
    • 5. April 2018 um 17:14

    Naja was nun was startet und auf was wartet und wie was von was gestartet wurde oder wird ist hier wirklich nicht klar.

    Versuchs noch mal ein wenig simpler ohne tausend Worte...

    Beispiel:

    - Script A startet automatisch per windows Dienst und läuft auf dem system account

    oder

    - Script A wurd bei Bedarf manuell gestartet und läuft mit Administratorberechtigungen (Benutzerkontensteuerung meldet sich)

    - Script B prüft / wartet ob Script A läuft, Script B wird mit einfachen Benutzerrechten ausgeführt

    - Script C soll von Script B gestartet werden wenn Script A existiert

    So wäre das wenigstens einfach und verständlich.

    Warum hab ich hier die Zusatzinfo drin was mit welchen Rechten / Accounts ausgeführt wird?

    Weil das eine wichtige Rolle spielt welche Prozesse dein Überwachungsscript überhaupt sehen kann und ggf. auch ob du als Benutzer letzlich eine GUI siehst oder nicht (Stichwort: interaktiver Dienst)


    Wie dem auch sei... alles nur Vermutungen, weil du deine Situation und die Randbedingungen völlig unzureichend beschrieben hast.

    Ahja und Debugging schadet auch nicht, wenn man den Dateipfad schon so ungewöhnlich und unsicher zusammenbastelt. Lass dir doch mal den Pfad in einer msgbox ausgeben. ;)

    EDIT:

    Ahja den zweiten Quellcode erst gerade gesehn... wie wärs mal das ganze ohne singleton zu versuchen? Denn wenn das nicht korrekt funktioniert beendet sich deine GUI bevor sie sichtbar wird.

  • Stringplit mit "" als Trennzeichen, alternativen?

    • misterspeed
    • 3. April 2018 um 20:53

    Und hier noch als Ergänzung, wenn du ein etwas aufgeräumteres Ergebnisarray willst und die Strings grundsätzlich mit einem Anführungszeichen beginnen / enden:

    C
    #include <Array.au3>
        $s_String = '"uuid" : "e606d53c-8d70-11e3-94b5-425861b86ab6"'
        $a_Split = StringSplit($s_String, '"')
        _ArrayDisplay($a_Split)
        $a_Split = StringSplit($s_String, """")
        _ArrayDisplay($a_Split)
    
        ConsoleWrite($s_String & @CRLF)
        $s_String = StringTrimRight(StringTrimLeft($s_String,1),1) ; erstes und letztes Zeichen abschneiden
        ConsoleWrite($s_String & @CRLF)
    
        $a_Split = StringSplit($s_String, '" : "',1) ; kompletter Teilstring als Trennzeichen
        _ArrayDisplay($a_Split)
    Alles anzeigen


    Alternativ findet sich hier mit Sicherheit auch jemand der das wesentlich eleganter mit regulären Ausdrücken erledigt.

  • Datei Time (Erstellung, Bearbeitung, letzter Zugriff) mit unterschiedlichen Ergebnissen

    • misterspeed
    • 31. März 2018 um 14:31

    Wie wäre eine serverbasierte Lösung? Von unserem Dokumentenmanagementsystem kenne ich das so, dass man eine Datei zunächst zum bearbeiten auscheckt. Solang die Datei so gesperrt ist darf kein anderer Anwender die Datei auschecken. Nach dem Bearbeiten wird die Änderung mit dem Server synchronisiert und die Datei wieder freigegeben. Alle Vorgängerversionen bleiben serverseitig erhalten und können bei Bedarf wiederhergestellt werden, inkl. Protokollierung wer wann Änderungen vorgenommen hat.

  • Datei Time (Erstellung, Bearbeitung, letzter Zugriff) mit unterschiedlichen Ergebnissen

    • misterspeed
    • 31. März 2018 um 12:29

    Naja ich vermute er will nicht nur ein Backup, sondern eher eine Mehrwege Synchronisation und ist deswegen auf die Timestamps gekommen . Das dürfte auch die einzige Möglichkeit sein zu beurteilen welche der beiden Kopien jetzt die aktuelle Fassung darstellt. (z.B. Daten wurden andernorts auf USB Stick verändert und sollen lokal nun auch aktuell sein, bzw. umgekehrt)

    Für ein einfaches Einwege Backup langt normalerweise ein Dateigrößenvergleich um eine Veränderung der Daten festzustellen. Im Zweifelsfall (gleiche Dateigröße) würde ich dann noch das modify Datum prüfen und bei Abweichung einen Hashwertvergleich durchführen (sofern zeittechnisch vertretbar).

  • Datei Time (Erstellung, Bearbeitung, letzter Zugriff) mit unterschiedlichen Ergebnissen

    • misterspeed
    • 30. März 2018 um 14:17
    Zitat von BugFix

    Bei einem anderen USB-Stick (NTFS, derselbe Hersteller) ist das Create-Datum OK. Aber Modified ist frischer als Last Access? Wie kann eine Datei modifiziert sein, ohne dass darauf zugegriffen wird?

    Naja, steht ja eigentlich schon in dem verlinkten Autoit Hilfeeintrag von dir?

    Zitat


    NTFS delays updates to the last access time for a file by up to one hour after the last access.

    Hier im Übrigen die komplette Fassung von Microsoft:

    https://msdn.microsoft.com/de-de/library/…0(v=vs.85).aspx

    Bei externen Medien kommt evtl. auch noch der Schreibcache stärker ins Spiel als das bei lokalen Medien der Fall ist. Dadurch kann der Timecode dann ggf. schon ein wenig von der entsprechenden User Aktion abweichen.

    Der Microsoft Artikel erwähnt außerdem noch "nicht geschlossene" Filehandles, was beim unsauberen Trennen von USB Medien passieren könnte.

  • Abbrechen Button in zweiter Schleife ohne Funktion

    • misterspeed
    • 28. März 2018 um 12:28
    Zitat von xSunLighTx3

    Wenn man aufwendige Skripts hat und dann noch extra ein Sleep() reinhaut, kann es zum ghosting der controls kommen.

    Also man klickt auf ein control, jedoch passiert nichts, da genau beim Klick der Sleep() Befehl ausgeführt wurde. Bei 10ms ist

    es aber relativ unwahrscheinlich, aber dennoch möglich. :P

    Stimmt so nicht. Selbst wenn man gerade auf ein Control klickt solange der 10ms Sleep aktiv ist (das ist im Übrigen bei guter Programmierung zu 99% der Zeit der Fall), so wird die dadurch erzeugte Window Message einfach nur in die Warteschlange gestellt und beim nächsten Aufruf von guigetmsg() abgearbeitet. Die maximale Verzögerung vom Klick bis zur Umsetzung sollte hierbei also 10ms nicht überschreiten, im Mittel beträgt die Verzögerung wohl eher nur 5ms, was beides nicht wahrnehmbar ist. Bei Onlinespielen hast du normalerweise Verzögerungen von mind. 20ms oder sogar mehr.

    Wenn es zu starken Verzögerungen kommt liegt das eher an schlechter Programmierung, wie z.B. einer zweiten Endlosschleife innerhalb der Hauptgui Schleife. :P

  • Bug in aktueller Autoit Version Makro ?

    • misterspeed
    • 26. März 2018 um 20:50

    Mal zur Erklärung... 32bit Software wird nach "Program Files (x86)" installiert, 64bit Software nach "Program Files".

    Wenn du nun eine 32bit Software ausführst ist es also völlig korrekt wenn du auf den "richtigen" Programmordner geleitet wirst.

    "Autoiter" erzwingt mit der Compiler Direktive, dass sein Script als 64bit Anwendung ausgeführt wird, daher sollte in seinem Script der Ordner "Program Files" zurückgegeben werden.

    Ähnliches wirst du auch beim Aufruf von Dateien aus "C:\windows\System32" (64bit Komponenten) bzw. "C:\windows\SysWOW64" (32bit Komponenten) beobachten können.

    Hier ein Ähnlicher Thread zum Thema:

    Probleme mit _FileListToArray()

    Siehe auch Dokumentation von Autoit:

    https://www.autoitscript.com/autoit3/docs/i…bit_support.htm

  • Automatische Installation

    • misterspeed
    • 25. März 2018 um 19:23

    In der autoit Hilfe findest du zu nahezu jeder Funktion ein passendes und lauffähiges Beispielscript.

    Und ja du kannst das auch alles mit Batchdateien machen.

    In Autoit hat man es aber evtl. etwas leichter und kann sich eine ansprechende GUI dazubasteln.

    Dein Script könnte z.B. vorab prüfen ob die Software vielleicht schon installiert ist, es könnte die Rückgabewerte der gestarteten Setups auswerten, es könnte evtl. nach Abschluss der Installation noch andere Dinge tun wie die Standardapplikation für ein bestimmtes Format festzulegen usw.

    Geht auch alles in Batchcode, ist aber umständlicher.

  • Automatische Installation

    • misterspeed
    • 25. März 2018 um 18:57

    Deswegen ja der Hinweis auf den soganannten Silent oder Quiet Parameter den normalerweise jeder Setup besitzt.

    Die auf Netzwelt vorgestellte Methode ist fehleranfällig, da du für jede Programmversion immerwieder Anpassungen vornehmen musst.

    Beim damaligen Setup war der Fenstertitel z.B. noch anderst, desweiteren kann sich etwas an den Buttons geändert haben auf de du Mausklicks simulierst.

    Die Methode funktioniert auch teilweise garnicht wenn der Setup keine Windows Standardcontrols verwendet (z.B. Setups mit Java GUI oder HTML basierte Setups).

    Viel einfacher ist es daher für die gewünschten Programme die passenden Silent Parameter zu recherchieren. Oft sind diese für unzählige andere Programme und zukünftige Programmversionen ebenfalls gültig, da die gleiche Setup Software zum Einsatz kommt. Du musst in der Regel also nur 3-4 verschiedene Setupsoftwaretypen supporten um hunderte Programme abdecken zu können.

    Die Hilfe / Dokumentation von Autoit ist um ein vielfaches übersichtlicher, einfacher und Anfänger freundlicher als die Dokumentation von Java oder C#.

  • Automatische Installation

    • misterspeed
    • 25. März 2018 um 17:10
    Zitat

    Wie kann ich 7-Zip im Silent Mode installieren?

    Für den EXE-Installer: Mit dem Parameter „/S“ können Sie 7-Zip ohne jegliche Nachfragen („silent“) installieren. Mit dem Parameter „/D=dir“ kann dabei der Zielordner angegeben werden. Bei diesen Optionen wird zwischen Groß- und Kleinschreibung unterschieden.

    Für den MSI-Installer: Benutzen Sie die Parameter /q INSTALLDIR="C:\Program Files\7-Zip"

    Quelle: http://www.7-zip.de/faq.html


    Da die meisten Programme auf Standardsetups von einer Handvoll Hersteller aufbauen sollte es für so gut wie jedes Programm vergleichbare Silent Parameter geben. Das ist dann genau das was du suchst... ein im Hintergrund unsichtbar ablaufender Setup.

    In Autoit starten kannst du deine Setups dann einfach mit der Funktion runwait(...)

    Wenn du dann noch eine GUI haben willst die dir anzeigt bei welchem Setup dein Programm gerade "wartet" und welche Programme noch folgen beschäftige dich einfach ein wenig mit dem Thema Autoit GUIs. Hierzu findest du jedemenge Tutorials hier im Forum bzw. Internet und auch Beispielcode in der Autoit Hilfe.

  • Probleme mit sqlite.exe bei größeren csv Dateien ("sqlite3.exe nicht gefunden")

    • misterspeed
    • 12. März 2018 um 22:05

    Kann dein Archiv da zwar nicht runterladen, aber irgendwie versteh ich deinen CMD Aufruf nicht so ganz wenn ich mir die Doku der sqlite3.exe so anschaue.

    Demnach schaut die Nutzung der CSV Import Funktion eigentlich ganz anderst aus.


    https://sqlite.org/cli.html

    Zitat

    8. CSV Import

    Use the ".import" command to import CSV (comma separated value) data into an SQLite table. The ".import" command takes two arguments which are the name of the disk file from which CSV data is to be read and the name of the SQLite table into which the CSV data is to be inserted.

    Note that it is important to set the "mode" to "csv" before running the ".import" command. This is necessary to prevent the command-line shell from trying to interpret the input file text as some other format.

    Code
    sqlite> .mode csv
    sqlite> .import C:/work/somedata.csv tab1

    There are two cases to consider: (1) Table "tab1" does not previously exist and (2) table "tab1" does already exist.

    In the first case, when the table does not previously exist, the table is automatically created and the content of the first row of the input CSV file is used to determine the name of all the columns in the table. In other words, if the table does not previously exist, the first row of the CSV file is interpreted to be column names and the actual data starts on the second row of the CSV file.

    For the second case, when the table already exists, every row of the
    CSV file, including the first row, is assumed to be actual content. If
    the CSV file contains an initial row of column labels, that row will be
    read as data and inserted into the table. To avoid this, make sure that
    table does not previously exist.

    Um die interaktive CLI zu automatisieren kann man die CMDs in eine Textdatei schreiben und übergeben:

    Zitat

    Create a text file with the lines you want to enter into the sqlite command line program, like this:

    .mode csv

    .import C:/work/somedata.csv tab1

    and then just call sqlite3 database.db < commands.txt

  • Probleme mit _FileListToArray()

    • misterspeed
    • 11. März 2018 um 13:56

    Ausprobieren? Habs nicht getestet, bzw. nutze die Funktion auch in keinem meiner Scripte.

  • Probleme mit _FileListToArray()

    • misterspeed
    • 10. März 2018 um 17:07

    Es ist nicht zwingend notwendig das Script als 64bit auszuführen um auf 64bit Systemdateien/-verzeichnisse zuzugreifen. Die Umleitung von Windows ist per WinAPI an-/abschaltbar.

    AutoIt
    #include <WinAPIFiles.au3>
    
    _WinAPI_Wow64EnableWow64FsRedirection(True)

    Du kannst also im Script einfach per @OSArch Makro prüfen ob 32 oder 64bit Windows und dann die Verzeichnisse bei Bedarf entsprechend ansteuern.

    https://www.autoitscript.com/autoit3/docs/i…bit_support.htm

  • Fileopendialog + 2te Funktion öffnen

    • misterspeed
    • 25. Februar 2018 um 11:58

    Ähm was willst denn eigentlich machen?

    Glaub du hast den Sinn des Fileopendialogs nicht verstanden. Der Dialog gibt dir als Ergebnis den Datei- oder Ordnerpfad zurück, danach kannst du damit machen was du willst, also z.B umbenennen oder löschen.

  • Unterschied Explorer Doppelklick zu ShellExecute

    • misterspeed
    • 16. Februar 2018 um 21:39

    Kann ich in meiner VM nicht reproduzieren.

    - W10 Version 1511

    - VLC 3,0,0

    - einmalig avi von hand geöffnet und VLC als Standard definiert (siehe Screenshot von dir)

    - danach shellexecute Testscript sowohl als x86 als auch x64 erfolgreich getestet (kein Windows Dialog, sofortige Wiedergabe mit VLC)

    Könnte mir höchstens vorstellen, dass dein Script mit erhöhten Rechten läuft und dadurch evtl. nicht die default Apps deines normalen Benutzers gültig sind. (requireadmin im script?)

  • Mit ftp:// Daten kopieren

    • misterspeed
    • 16. Februar 2018 um 20:42
    Zitat von Faultier_1982

    Auf meinem PC hat es super funktioniert aber auf meinem Tablet können keine Dateien ausgelesen werden.....

    Hab mir deinen Quellcode zwar nicht angesehn, aber mal von evtl. vorhandenen Fehlern im Quellcode abgesehen könnte auch schlichtweg die Firewall / Antivirenlösung unterschiedlich und letztlich für das ungleiche Verhalten verantwortlich sein. Desweiteren ist dein Tablet sehr wahrscheinlich per WLAN im Netzwerk angebunden und dein PC vermutlich eher über LAN. Letzteres sollte zwar prinzipiell keinen Unterschied machen, jedoch ist WLAN in der Regel weniger verlässlich als LAN, da störanfälliger.

    Um beides als Fehlerquelle auszuschließen:

    1. Antivirensoftware und Firewall testweise deaktivieren

    2. Deinen WLAN Router mal neustarten

    3. WLAN des Tablets mal aus-/einschalten bzw. Tablet auch mal komplett neustarten.

    4. Prüfen ob deine WLAN Verbindung stabil ist (z.B. Dauerping auf deinen FTP Server: CMD/Eingabeaufforderung -> ping xxx.xxx.xxx.xxx -t )

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™