• Hinweis: aktuellstes Problem bei dem Projekt immer am Ende des Themas

    Hallo Miteinander.

    Ich brauche Hilfe!

    AutoItstall ist ein konfigurationsdateiengesteuertes Softwareauswahlprogramm, das speziell für Softwaresammlungen entwickelt wurde. Kleinere Unternehmen ohne Softwareverteilung haben mit diesem Programm die Möglichkeit, einfach und effizient Software auf einer DVD mit zum Zielrechner zu nehmen und dort mehrere Programme mit wenigen Mausklicks zu installieren. Dabei bietet das Programm gerade für "Neulinge" in der Benutzung zahlreiche Features wie Informationstext, Bild/Screenshot und Homepage. Auf den einzelnen Kategorien-Seiten müssen nur die Haken korrekt gesetzt werden, und schon beginnt die Installation der Programme nach dem Klick auf "Ausgewählte Software jetzt installieren".

    http://dl.dropbox.com/u/49398111/autoitstall.zip

    Das ganze bisher noch ohne genaue Versionsnummerierung, da nicht einmal die Basisfunktionen gegeben sind :D
    Anders ausgedrückt: Es sieht vielleicht schick aus, aber es läuft nicht.
    Es hängt, wenn man Haken gesetzt hat und dann auf "Installiere markierte Software jetzt" klickt. Eigentlich sollte er dann erstmal das Array mit den Checkboxen durchgehen und hochzählen, wie viele Sachen installiert werden, zwecks späterer Anzeige Installiere 4/11 etc. Allerdings bricht Autoit an er Stelle ohne brauchbare Fehlermeldung ab. Der Download enthält alle benötigten Dateien, interessant ist nur die autoitstall.au3. Die Kommentare sind teilweise nicht der Brüller. Zuvor hatte ich noch die _UnMarkAll ersetzt urch die _UnMark_Vorheriges.
    Sry für die doofen Variablennamen und die wenigen Kommentare, wenn Fragen zur Funktionsweise bestehen, einfach fragen ;)

    Hier der angefragte, direkte Quellcode, so allerdings nicht ausführbar, da Dateien fehlen.

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icon.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=AutoItstall
    #AutoIt3Wrapper_Res_Description=Installationsmenü
    #AutoIt3Wrapper_Res_Fileversion=0.0.0.1
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    AutoitSetOption("TrayIconHide" ,1)

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

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>
    #include <array.au3>

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

    If(IniRead("settings.ini", "Einstellungen", "Hinweise", "ja")="ja") Then
    MsgBox(48,"Wichtige Hinweise","1.) Sie sollten Hardwaretreiber vor der Software installieren! Die Hardwaretreiber finden Sie auf den Installationsmedien, die der Hardware beim Kauf beiliegen." & @CRLF & @CRLF & "2.) Sie sollten ihre Virenschutzsoftware während den automatische Installationen unbedingt deaktivieren! Es wird nur installiert und keine Anwendung gestartet. Überprüfen Sie gegebenenfalls nach Abschluss aller Installationen ihren Computer durch einen manuellen Suchvorgang nach Viren." & @CRLF & @CRLF & "3.) Es werden Administratorrechte benötigt, unter Windows Vista und neueren Windows-Betriebssystemen muss UAC (User Account Control) deaktiviert werden, dies kann nach diesem Hinweis über den Konfigurieren-Button rechts oben im Menü geschehen." & @CRLF & @CRLF & "4.) Während den automatischen Installationen sollten Sie nicht am Computer arbeiten!" & @CRLF & @CRLF & "5.) Nach Abschluss aller automatischen Installationen erfolgt ein automatischer Neustart.")
    EndIf

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

    Dim $onlineoffline
    $ping = Ping("www.google.com")
    If $ping > 0 then
    $onlineoffline = "data\website_online.jpg"
    Else
    $onlineoffline = "data\website_offline.jpg"
    EndIf

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

    $Form2 = GUICreate("AutoItstall", 1024, 769, -1, -1)
    $Pic15 = GUICtrlCreatePic("data\header.jpg", 0, 0, 174, 48)
    ;GUICtrlSetTip(-1, "Website im Browser öffnen")
    GUICtrlSetCursor (-1, 0)
    $Pic16 = GUICtrlCreatePic("data\background.jpg", 174, 0, 706, 48)
    $Help = GUICtrlCreatePic("data\background_thin.jpg", 880, 0, 48, 48)
    $About = GUICtrlCreatePic("data\about.jpg", 928, 0, 48, 48)
    GUICtrlSetTip(-1, "Über dieses Programm")
    GUICtrlSetCursor (-1, 4)
    ;$Combo1 = GUICtrlCreateCombo("Combo1", 648, 56, 369, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    ;$Label33 = GUICtrlCreateLabel("Fertige Zusammenstellung auswählen", 464, 61, 181, 17)
    $Install_Markierte = GUICtrlCreateButton("Installiere markierte Software jetzt!", 8, 56, 193, 25)
    $Settings = GUICtrlCreatePic("data\settings.jpg", 976, 0, 48, 48)
    GUICtrlSetTip(-1, "Einstellungen")
    GUICtrlSetCursor (-1, 0)
    $PageControl1 = GUICtrlCreateTab(8, 88, 1012, 672)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")

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

    $AnzKategorien=IniRead("settings.ini","Einstellungen","Kategorien","1")
    $AnzZusammenstellungen=IniRead("settings.ini","Einstellungen","Zusammenstellungen","1")
    ; An Stelle [n][1] im Array steht ein Name, an Stelle [n+1][1] steht der Pfad zur Konfigurationsdatei, für alle ungeraden n.
    $Kategorien=IniReadSection("settings.ini","Kategorien")
    ; Legt die Kategorien als Reiter-Array an.
    Dim $TabSheetKategorien[($AnzKategorien*2)-1]
    ; Legt die in jedem Reiter vorhandenen Elemente an...
    Dim $AktuellBildBox[$AnzKategorien]
    Dim $AktuellBild[$AnzKategorien]
    Dim $Software[$AnzKategorien]
    Dim $AktuellBeschreibungBox[$AnzKategorien]
    Dim $AktuellBeschreibung[$AnzKategorien]
    Dim $Beschreibung[$AnzKategorien]
    Dim $Grafik[$AnzKategorien]
    Dim $AktuellWebsite[$AnzKategorien]
    Dim $AktuellSprache[$AnzKategorien]
    Dim $AktuellInstall[$AnzKategorien]
    Dim $AktuellFreeware[$AnzKategorien]
    Dim $AktuellParameter[$AnzKategorien]
    Dim $AnzElemente[$AnzKategorien]
    Dim $AktuellWebsiteGrafik[$AnzKategorien]
    Dim $AktuellInstallGrafik[$AnzKategorien]

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

    ;26 mögliche Elemente je Kategorie sollten reichen - passen ja eh nur 26 auf eine Seite...
    Dim $Checkboxen[$AnzKategorien][26]
    Dim $Icons[$AnzKategorien][26]
    Dim $Titel[$AnzKategorien][26]
    Dim $Hersteller[$AnzKategorien][26]
    Dim $ElementeBeschreibung[$AnzKategorien][26]
    Dim $ElementeBild[$AnzKategorien][26]
    Dim $ElementeWebsite[$AnzKategorien][26]
    Dim $ElementeSprache[$AnzKategorien][26]
    Dim $ElementeFreeware[$AnzKategorien][26]
    Dim $ElementeInstall[$AnzKategorien][26]
    Dim $ElementeSilentSetup[$AnzKategorien][26]
    Dim $ElementeParameter[$AnzKategorien][26]
    Dim $ElementeKillTime[$AnzKategorien][26]

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

    Dim $AktuellMarkiertes=1
    Dim $AktuellMarkiertes_Kategorie=1

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

    $lw1=0
    $lw2=0
    While ($lw1 < ($AnzKategorien*2))
    $TabSheetKategorien[$lw1] = GUICtrlCreateTabItem($Kategorien[$lw1+1][1])
    $inifile=$Kategorien[$lw1+2][1]

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

    $Beschreibung[$lw2] = GUICtrlCreateEdit("", 16, 120, 489, 65, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
    $file0 = FileOpen(IniRead($inifile,"Daten","Beschreibung","fehlt.txt"), 0)
    GUICtrlSetData($Beschreibung[$lw2], FileRead($file0))
    FileClose($file0)

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

    $Grafik[$lw2] = GuiCtrlCreatePic(IniRead($inifile, "Daten", "Grafik", ""), 512, 120, 64, 64)

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

    $Software[$lw2] = GUICtrlCreateGroup("Software", 16, 191, 561, 553)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 417, 337)
    $AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 400, 300)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 527, 417, 217)
    $AktuellBeschreibung[$lw2] = GUICtrlCreateEdit("", 600, 544, 401, 193, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $AktuellWebsiteGrafik[$lw2] = GUICtrlCreatePic($onlineoffline, 588, 464, 48, 48)
    GUICtrlSetTip(-1, "Website im Browser öffnen")
    GUICtrlSetCursor (-1, 0)
    GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellSprache[$lw2] = GUICtrlCreatePic("data\german.jpg", 652, 464, 48, 48)
    GUICtrlSetTip(-1, "Sprache: deutsch")
    GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellFreeware[$lw2] = GUICtrlCreatePic("data\freeware.jpg", 711, 464, 48, 48)
    GUICtrlSetTip(-1, "Keine Freeware!")
    GUICtrlSetCursor (-1, 4)
    GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellInstallGrafik[$lw2] = GUICtrlCreatePic("data\install.jpg", 959, 464, 48, 48)
    GUICtrlSetTip(-1, "Jetzt installieren!")
    GUICtrlSetCursor (-1, 0)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    ;Eintragen der Elemente in die Softwareliste
    $AnzElemente[$lw2] = IniRead($inifile, "Daten", "Elemente", 0)
    $lw3=0
    While ($lw3 < $AnzElemente[$lw2])
    ;...
    $temp = Mod($lw3, 2)
    If ($temp == 0) Then
    ;linke Spalte
    $Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 24, Floor(223+40*($lw3/2)), 16, 16)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    $Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 40, Floor(215+40*($lw3/2)), 32, 32)
    $Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 80, Floor(215+40*($lw3/2)))
    $Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 80, Floor(231+40*($lw3/2)))
    Else
    ;Rechte Spalte
    $Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 296, 203+40*($lw3/2), 16, 16)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    $Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 296, 195+40*($lw3/2), 32, 32)
    $Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 352, 195+40*($lw3/2))
    $Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 352, Floor(211+40*($lw3/2)))
    EndIf
    $file1 = FileOpen(IniRead($inifile, "Element"&$lw3+1, "Beschreibung", "fehlt.txt"), 0)
    $ElementeBeschreibung[$lw2][$lw3] = FileRead($file1)
    FileClose($file1)
    $ElementeBild[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Grafik", "")
    $ElementeWebsite[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "URL", "http://www.autoit.de")
    $ElementeSprache[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Sprache", "en")
    $ElementeFreeware[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Freeware", "ja")
    $ElementeInstall[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Setupdatei", "data\dummy.exe")
    $ElementeSilentSetup[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "SilentSetup", "data\dummy.exe")
    $ElementeParameter[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Parameter", "")
    $ElementeKillTime[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "KillTime", "120")
    ;Laufvariable für die Elemente erhöhen
    $lw3=$lw3+1
    WEnd
    ;übriger Code für die einzelnen Kategorien
    ;Erhöhen der Laufvariablen, $lw1 zählt im Auslesearray, $lw2 zählt in den Zielarrays, beide zählen in den Kategorien hoch.
    $lw1=$lw1+2
    $lw2=$lw2+1
    WEnd
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    $iAktTab = 0

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Install_Markierte
    _Installiere()
    Case $PageControl1
    $iAktTab = _GUICtrlTab_GetCurSel($PageControl1)
    Case $Checkboxen[$iAktTab][0] To $Titel[$iAktTab][$AnzElemente[$iAktTab] - 1]
    ConsoleWrite("Ksg-ID: " & $nMsg & @TAB)
    if mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
    $iAktCheckBox = -1 ;es kann keine Checkbox sein
    else
    $iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4
    EndIf
    ConsoleWrite("Checkbox: " & $iAktCheckBox & @TAB)
    if mod($nMsg - $Icons[$iAktTab][0],4) Then
    $iAktIcon = -1 ;es kann kein Icon sein
    else
    $iAktIcon = ($nMsg - $Icons[$iAktTab][0]) /4
    ;_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
    _UnMark_Vorheriges($AktuellMarkiertes_Kategorie, $AktuellMarkiertes)
    _SelectOne($iAktTab, $iAktIcon)
    EndIf
    ConsoleWrite("Icon: " & $iAktIcon & @TAB)
    if mod($nMsg - $Hersteller[$iAktTab][0],4) Then
    $iAktHersteller = -1 ;es kann kein Hersteller sein
    else
    $iAktHersteller = ($nMsg - $Hersteller[$iAktTab][0]) /4
    ;_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
    _UnMark_Vorheriges($AktuellMarkiertes_Kategorie, $AktuellMarkiertes)
    _SelectOne($iAktTab, $iAktHersteller)
    EndIf
    ConsoleWrite("Hersteller: " & $iAktHersteller & @TAB)
    if mod($nMsg - $Titel[$iAktTab][0],4) Then
    $iAktTitel = -1 ;es kann kein Titel sein
    else
    $iAktTitel = ($nMsg - $Titel[$iAktTab][0]) /4
    ;_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
    _UnMark_Vorheriges($AktuellMarkiertes_Kategorie, $AktuellMarkiertes)
    _SelectOne($iAktTab, $iAktTitel)
    EndIf
    ConsoleWrite("Titel: " & $iAktTitel & @CRLF)
    case $AktuellInstallGrafik[$iAktTab]
    GUISetState(@SW_HIDE)
    RunWait($AktuellInstall[$iAktTab]&" "&$AktuellParameter[$iAktTab])
    GUISetState(@SW_SHOW)
    case $AktuellWebsiteGrafik[$iAktTab]
    ShellExecute($AktuellWebsite[$iAktTab])
    case $AktuellFreeware[$iAktTab]
    MsgBox(64,"Keine Freeware!","Die (dauerhafte) Benutzung dieser Software ist kostenpflichtig!"&@CRLF&"Sie können Ihre Registrierungsinformationen beim ersten Programmstart eingeben.")
    EndSwitch
    WEnd

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

    Func _UnMark_Vorheriges($cat, $temp)
    GUICtrlSetBkColor($Hersteller[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetBkColor($Titel[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetState($AktuellFreeware[$cat], $GUI_HIDE)
    GUICtrlSetState($AktuellSprache[$cat], $GUI_HIDE)
    EndFunc

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

    Func _UnMarkAll($cat, $anzelements)
    $temp=0
    While ($temp < $anzelements+1)
    GUICtrlSetBkColor($Hersteller[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetBkColor($Titel[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
    $temp=$temp+1
    WEnd
    GUICtrlSetState($AktuellFreeware[$cat], $GUI_HIDE)
    GUICtrlSetState($AktuellSprache[$cat], $GUI_HIDE)
    EndFunc

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

    Func _SelectOne($cat, $element)
    $AktuellMarkiertes=$element
    $AktuellMarkiertes_Kategorie=$cat
    GUICtrlSetBkColor($Hersteller[$cat][$element], 0x7A96DF)
    GUICtrlSetBkColor($Titel[$cat][$element], 0x7A96DF)
    GUICtrlSetData($AktuellBeschreibung[$cat], $ElementeBeschreibung[$cat][$element])
    GUICtrlSetImage($AktuellBild[$cat], $ElementeBild[$cat][$element])
    $AktuellInstall[$cat] = $ElementeInstall[$cat][$element]
    $AktuellWebsite[$cat] = $ElementeWebsite[$cat][$element]
    $AktuellParameter[$cat] = $ElementeParameter[$cat][$element]
    If ($ElementeFreeware[$cat][$element] <> "ja") Then
    GUICtrlSetState($AktuellFreeware[$cat], $GUI_SHOW)
    EndIf
    If (StringCompare($ElementeSprache[$cat][$element], "de")=0) Then
    GUICtrlSetImage($AktuellSprache[$cat], "data\german.jpg")
    GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
    GUICtrlSetTip($AktuellSprache[$cat], "Sprache: deutsch")
    EndIf
    If (StringCompare($ElementeSprache[$cat][$element], "en")=0) Then
    GUICtrlSetImage($AktuellSprache[$cat], "data\english.jpg")
    GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
    GUICtrlSetTip($AktuellSprache[$cat], "Sprache: englisch")
    EndIf
    GUICtrlSetState($AktuellInstallGrafik[$cat], $GUI_SHOW)
    GUICtrlSetState($AktuellWebsiteGrafik[$cat], $GUI_SHOW)
    EndFunc

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

    Func _Zaehle_Markierte()
    $returnwert=0
    $zaehlcats=0 ;Laufvariable für die Kategorien
    $zaehlelements=0 ;Laufvariable für die Elemente der jeweiligen Kategorie
    While ($zaehlcats<($AnzKategorien-1))
    While ($zaehlelements<($AnzElemente[$zaehlcats]-1))
    If (GUICtrlGetState()=$GUI_CHECKED) Then
    $returnwert+=1
    EndIf
    $zaehlelements+=1
    WEnd
    $zaehlcats+=1
    WEnd
    return $returnwert
    EndFunc

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

    Func _Installiere()
    $Anzahl_Markierte=_Zaehle_Markierte()
    #Region --- CodeWizard generated code Start ---
    ;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Info
    MsgBox(64,"Anzahl markierte Elemente","Es wurden " & $Anzahl_Markierte & " Programme zur Installation ausgewählt.")
    #EndRegion --- CodeWizard generated code End ---

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

    EndFunc

    [/autoit]

    settings.ini:

    Spoiler anzeigen


    sicherheit.ini:

    Spoiler anzeigen


    runtimes.ini:

    Spoiler anzeigen

    PS: Wenn ich das Ding in Autoit lauffähig bekommen habe, will ich das objektorienterit in C# nachcoden. da brauch ich nicht endlos Arrays sondern "einfach" Objekte. Nachteil ist, dass auf dem Zielrechner .net2.0 installiert sein muss, aber darum soll es hier und jetzt ja überhaupt nicht gehen... Über diese ungelegten Eier können wir uns unterhalten, wenn es so weit ist.
    PS: Einen Ladebildschirm am Anfang habe ich noch nicht hinzugefügt, kommt aber die Tage auch noch, wenn die Grundfunktionalität gegeben ist.

    2 Mal editiert, zuletzt von Weisgarnix (21. Mai 2012 um 08:42)

  • Es geht auch darum, dass ich C# ohnehin lernen muss...

    Aber hier gehts ja sowieso um den unbekannten Fehler in meinem Script/Programm...
    Und keine Sorge, "Kleinigkeiten" werde ich auch weiterhin in Autoit coden, wegen einem Mini-Tool .net vorauszusetzen ist Schwachsinn, wenn man autoit kennt ;)

  • Es hilft ungemein, wenn du den Code direkt (mit [autoit]- und [spoiler]-Tags umfasst in den ersten Post schreibst, so muss man sich das nicht erst runterladen.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Wenn dann eine Antwort erfolgt, tue ich das doch glatt. ^^
    Ausführen kann man das so allerdings nicht, weil die anderen Dateien auch benötigt werden.
    Kann nun jemand was damit anfangen?

    Einmal editiert, zuletzt von Weisgarnix (13. Februar 2012 um 09:56)

  • Hallo weisgarnix,

    bei der Kombination von Authornamen & Programmnamen kann es ja nichts werden. Stall bedeutet in der Fliegersprache das Abreisen des Auftriebs, die Folge davon ist oft ein unkontrolliertes abschmieren und Totalcrash, vor allem der Pilot garnichtsweis ist dieser warscheins unvermeindlich. Du solltest die Namen ändern.

    Spass beiseite: ein Fehler liegt un Zeile 287:

    [autoit]

    If (GUICtrlGetState()=$GUI_CHECKED) Then

    [/autoit]

    ob noch weitere vorhanden sind weis ich nicht denke aber dass du jetzt weiter kommst,

    mfg autoBert

  • *Würg* Das hätte mir auffallen müssen!
    Danke dir vielmals!
    Mensch bin ich doof^^ Ich sollte schon sagen, von welchem Control er den Status abfragen soll...
    ou man, was hab ich mir dabei nur gedacht^^
    Also Danke dir nochmals ;)
    Asow, GUICtrlRead ist natürlich die bessere bzw. einzig richtige Wahl^^

    Einmal editiert, zuletzt von Weisgarnix (14. Februar 2012 um 09:46)

  • Mir stellt sich eine neue Frage:
    Ich möchte eine maximale Installationsdauer festlegen lassen können (Siehe Quellcode/Ini-Dateien).
    Haken dabei: Nutze ich RunWait, wartet mein Programm, bis sich das Setup beendet, egal, obs hängt oder nicht. Ist also suboptimal. Genaus umgekehrt, nutze ich nur Run und warte dann die vorgegebene Maximalzeit ab, verschenke ich unnötig Zeit. Hat jemand eine Idee, wie ich das Problem lösen kann?
    Momentan ist mein bester Ansatz, per Run zu starten und dann per ProcessExists und der Maximalen Installationsdauer aufgeteilt in unzählige Sleeps per Schleife zu packen, solange nicht maximalZeit erreicht ist oder Prozess nimmer existiert wartet er weiter.
    Was meint ihr?
    Eine Überprüfung je Sekunde sollte ja reichen.
    Den Fall, dass das Setup nicht abgeschlossen ist, wenn der Prozess beendet ist, bleibt hier mal außen vor.

  • Also ich würde es mit AdLibRegister() und einem Delay von 2 Sekunden machen also schreibste dir eine Funktion mit dem Parameter der Pid vom Programm also $Pid = Run(xyz.exe) und dann fragst du in der Funktion ProcessExists($pid) und du Fragst noch _TimerDiff() ab ob deine Maximalzeit erreicht ist natürlich vorher noch mit $Timer = Timerinit() den Timer starten :P

    Gruß Marvin

  • So?

    [autoit]

    $isrunning=True
    $pid=Run("program.exe")
    $maxtime=120000 ;120 Sekunden
    $timer=TimerInit()
    AdlibRegister("_testandkill("&$pid&")", 2000)
    While ((TimerDiff($timer)<$maxtime)Or($isrunning=true))
    Sleep(2000);Abwarten
    WEnd
    If $isrunning Then
    ProcessClose($pid)
    EndIf
    AdlibUnRegister()

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

    Func _testandkill($processid)
    If (ProcessExists($processid)=0) Then
    $isrunning=False
    EndIf
    EndFunc

    [/autoit]

    4 Mal editiert, zuletzt von Weisgarnix (14. Februar 2012 um 15:53)

  • Servous

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $isrunning,$pid,$maxtime,$timer ; um Fehler zu vermeiden Variablen die Scripübergreifend verwendet werden als Global Deklarieren
    Global Const $maxtime = 120000

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

    $isrunning = True
    $pid=Run("program.exe")
    $timer=TimerInit()
    AdlibRegister("_testandkill("&$pid&")", 2000)

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

    While $isrunning = True
    Sleep(2000);Abwarten
    WEnd

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

    Func _testandkill($processid)
    If Not ProcessExists($processid) Then
    $isrunning = False
    AdlibUnRegister() ; Funktion unreg weil Prozess abgeschlossen
    Else If TimerDiff($timer) < $maxtime Then
    $isrunning = False
    AdlibUnRegister() ; Funktion rung weil Prozess gekillt wird..
    ProcessClose($processid) ; Programm zwangsweise schließen da Keine Rückmeldung oder so..
    EndIf
    EndFunc

    [/autoit]

    so würde ich es glaube ich machen.. nicht getestet ^^

    Gruß Marvin

  • Auch wenn ProcessExists einen Int returnt läuft dass so ^^ musst nicht immer einen Vergleichsoperator angeben :)

    Siehe Autoit Hilfe

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

    If ProcessExists("notepad.exe") Then
    MsgBox(0, "Example", "Notepad is running.")
    Else
    MsgBox(0, "Example", "Notepad is not running.")
    EndIf

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


    Gruß Marvin

  • Ich bin so frei und setze deinen Code gerade ein/um.
    Aus dem < habe ich ein > gemacht, müsste dann stimmen, oder verstehe ich TimeDiff falsch?

    Eine weitere Frage. AdLibRegister ist ja selber ne Funktion, kann ich irgendwie erreichen, dass meine testkill-Funktion mir je nach I-Zweig, der zutraf, einen Wert zurückgibt? Notfalls mach ich das über eine globale Variable. wäre halt nicht so "schön"... :D

    *Edit: Erstmal egal, habs akut anders gelöst.

    So. Ich hänge fest und komm nich raus.
    http://dl.dropbox.com/u/49398111/autoitstall.7z
    Der Fehler müsste irgendwo in _Installiere() oder in _testandkill() sitzen... aber wo? :(
    Die Einträge werden nicht weiters in die log-Datei geschrieben, nur die ersten beiden Einträge erfolgen:
    2012-03-05-14-25-06: 1 programs will be installed.
    2012-03-05-14-25-06: Installation of 28 sucessfully started.
    Warum 28 als Titel drin is, keine Ahnung.

    2 Mal editiert, zuletzt von Weisgarnix (5. März 2012 um 14:48)

  • Servous, also zum ersten mit "Return $Variable" kannst du aus einer Funktion Springen und einen Wert zurückliefern, andere Möglichkeit mit SetError() kannst du einen Error festlegen den du dannach Abfragen kannst..

    wegen deinem Script bzw den Fehlern muss ich mal schauen nachher sitze gerade in einem Seminar.. :P
    aso kleiner Tipp noch ich würde an deiner Stelle öfter mit "For" Schleifen anstatt von "while" arbeiten, bin mir nicht sicher ob es was an der Leistung macht aber ich Persönlich finde For Schleifen besser und diese sind in deinem Fall einerfacher zu handhaben und du brauchst keinen Counter wie du ihn bei den WHile schleifen meist brauchst

    [autoit]


    While ($x < $y)
    ;blabla
    $x +=1 ; usw .. sowas benötigt man dann nicht
    Wend

    [/autoit]

    du arbeitest sowieso schon viel mit Arrays also kannst du diese auch für die Angabe der durchläufe einfach verwenden (Ubound($Array)-1)

    Gruß Marvin

  • Das mit dem Return ist mir klar, nur wie weise ich den Rückgabewert dann einer Variablen zu? Mit AdlibRegister gebe ich was andres zurück nicht meinen gewünschten Return-Wert... Aber wie gesagt, habs anders gelöst. habe in der Funktionins Logfile geschrieben bzw. ins Logfile schreiben lassen und gut is.

    Und zu den Schleifen: Die Grenzen der Arrays sind leider nicht die tatsächlich genutzte Größe der Arrays, sondern die Anzahl der gefüllten Felder im Array variiert. Zwecks Laufzeit dürfte das irrelevant sein.

    Danke dir schonmal an der Stelle, ich find auf Teufel komm raus nix falsches :(