Meinst Du hierhin ?
control.exe /name Microsoft.DefaultPrograms /page pageFileAssoc
oder hierher:
control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram
Quelle: https://msdn.microsoft.com/en-us/library/…DefaultPrograms
Meinst Du hierhin ?
control.exe /name Microsoft.DefaultPrograms /page pageFileAssoc
oder hierher:
control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram
Quelle: https://msdn.microsoft.com/en-us/library/…DefaultPrograms
#RequireAdmin
#include <AutoItConstants.au3>
;#include <Constants.au3>
Global $data
Global $sFilename = @ScriptDir & "\resultat.txt"
$DefragPath = " /c Defrag D: /A"
$pid = Run(@ComSpec & $DefragPath, @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD); Stdout
Do
$data &= StdOutRead($pid)
Until @error
$file = FileOpen($sFilename, 2)
FileWrite($file, $data)
FileClose($file)
sleep(1000)
ShellExecute($sFilename)
Exit
Alles anzeigen
Zeile 2-3 musste ich bei mir austauschen, wahrscheinlich nutzt die aktuellste AutoIt-Version ein anderes Include
Zeile 6+13+17 ShellExecute funktioniert nicht mit dem FileHandle
Und wichtig: Muss auf einem 64bit-Windows auch mit x64 kompiliert ausgeführt werden. Scheinbar gibt es auf einem x64-System kein 32bit Defrag.exe.
Ohne auf die grundlegende Arbeit der Funktion einzugehen, würde ich schätzen/raten das die Aktualisierung der GUI (GUICtrlSetData) mehr Zeit benötigt wie der restliche Teil !
Ggf. würde ich die Progressbar nur aktualisieren, wenn sich der zu setzende Wert geändert hat.
z.B.:
$new_perc = Int($perc * $i)
If $new_perc <> $old_perc Then
GUICtrlSetData($pb_Progress,....)
$old_perc = $new_perc
EndIf
Statt 10Mio Änderungen nur noch 100 !
Anschließend würde ich mir die 10Mio mal durchlaufende, ziemlich komplexe If...ElseIf-Anweisung anschauen. Die wird bei jedem Durchlauf geprüft und ich könnte mit vorstellen, das die mehrfache Prüfung der If-Anweisung doch schon etwas an Zeit verbraucht...
Weil das Array $var1 bei Eingabe eines kürzeren Codes keine 9 Felder hat, du sie aber in den Zeilen 13-21 einer neuen Variable zuweisen willst. Warum auch immer... ???
So vielleicht... (ungetestet)
HotKeySet("{ESC}", "Terminate")
Func Terminate()
Exit
EndFunc
$Input = InputBox("Arbeitspositionen", "Bitte gib den Code für die Arbeitspositionen an", "", "", -1, -1, 0, 0)
$var1 = StringSplit($Input,"")
For $i = 1 To $var[0]
If $var1[$i] = 0 Then ShellExecuteWait ("nix" & $i & ".au3")
If $var1[$i] = 1 Then ShellExecuteWait ("5min" & $i & ".au3" )
If $var1[$i] = 2 Then ShellExecuteWait ("istsoll" & $i & ".au3" )
Sleep (300)
Next
Alles anzeigen
Readfile und Openfile sind umgekehrt anzuwenden, ansonsten funktioniert es so.... ![]()
Möglicherweise Leerzeichen im Pfad/Programm ?
Kompiliertes 'Startsetup.exe' muss in die Gruppenrichtlinie (Computerkonfiguration\Windows-Einstellungen\Scripts\Starten) als Startscript, im gleichen Ordner muss die 'Install.ini' liegen. Nun könnte man die INI mit nem Texteditor bearbeiten, was aber nicht so komfortabel ist.
Daher:
In den gleichen Ordner muss auch der 'Editor_Startsetup' und 'Default_Befehle.ini'. Dieser Editor bearbeitet dann die 'Install.ini'.
Im Quellcode des Editors ist mindestens in Zeile 46 die OU der Computer in der Domäne anzugeben.
Wie gesagt, wurde schon eine ganze Weile nichts mehr an dem Programm geändert. Wäre wahrscheinlich einiges zu verbessern.
Hier der Quellcode:
Edit (20.01.2016): Fehler im Editor korrigiert.
Meine Frage bezog sich darauf, das eine Silent-Installation (inkl. #RequireAdmin) als Startscript per Domänen-Gruppenrichtlinie bei uns schon seit Jahren einwandfrei seinen Dienst tut.
Durchzuführende Intallationen trägt ein (AutoIt-)Editor in eine INI, wobei die Zielrechner aus dem AD gelesen werden. Das eigentliche (AutoIt-)Startscript der Gruppenrichtlinie sucht nach Installationen für den aktuellen Rechner, führt diese noch unter dem Benutzer 'SYSTEM' lokal aus und schreib den Rückgabewert in ein Logfile. Alles ohne UAC-Nachfrage ! Während des Setup kann zwar keine MsgBox verwendet werden, aber der Benutzer bekommt eine Splash-Meldung zu sehen, was gerade abläuft.
Notwendig sind nur Lesenrecht für die Domänencomputer auf der Freigabe wo die Setup's liegen und Schreibzugriff auf dem Logfile- und INI-Ordner (hier zum entfernen der gerade laufenden Installation).
In der INI kann ein Admin sehen was noch aussteht (Rechner wurde noch nicht neu gestartet) und im Log welche Setup's gelaufen sind und mit welchem Ergebnis.
Alles ohne teure Spezial-Software....
Sprichst Du von einer Installation in der Domäne oder Einzel-AP ?
Test von _zip_count(), _zip_list() und _zip_unzipall() mit einem dafür erstellten einfachen (ohne Unterverzeichnisse) ZIP-Archives, zeigten unter Win7 x64 keine Probleme !
Schau mal im englischen Forum unter: KLICK
Dort hat die UDF auch bereits ein _ am Anfang des Dateinamens, woran man meist erkennen kann, das sie keine Standard-UDF des AutoIt-Paketes ist.
Du weist aber schon (ich frage nur nach, auf Grund Deiner geringen Beitragsanzahl), das die Funktion _Zip_UnzipAll() wahrscheinlich in der Datei 'Zip.au3' definiert sein wird und das Du diese Datei 'Zip.au3' im AutoIt-Include-Ordner oder dem aktuellen Script-Verzeichnis zur Verfügung stellen musst !?
Konnte beim ersten Test keine Auffälligkeiten feststellen. Externe USB-Sounkarte funktionierte einwandfrei.
Ggf. wäre es noch von Vorteil, wenn man den Ort der Konfigurationsdateien festlegen könnte (für portablen Einsatz auf dem Stick).
Z.B. wenn lokal im Ordner welche gefunden werden, das diesen Ordner nutzen, o.ä.
Ansonsten: Sieht Top aus !!!
Java-Webstart heißt die Lösung.
Findet sich als 'javaws.exe' nach der Installation von Java, in dessen Programordner.
Dem brauchst Du meines Wissens nach, nur die JNLP-Datei (u.U. vorher downloaden) als Parameter übergeben...
EIne Frage hab ich noch:
Kann ich auch festlegen, ab welcher Zeile gesucht werden soll?
Klar, mit etwas mehr Aufwand:
$sFile = FileOpenDialog("Datei ?", @ScriptDir, "Alle (*.*)")
$sSearch = InputBox("Suchstring ?","Geben Sie den zu suchenden Text ein:")
$iFromLine = InputBox("Ab Zeile ?","Geben Sie die Startzeile ein:", 1)
$FileData = FileRead($sFile)
$iStartPos = StringInStr($FileData, @LF, 0, $iFromLine - 1) + 1
$sFound = StringLeft($FileData, StringInStr($FileData, $sSearch, 0, 1, $iStartPos))
$sOut = StringReplace($sFound, @LF, "")
Msgbox(0,"Ausgabe", "Gefunden in Zeile: " & @extended + 1)
Meine Lösung:
$sFile = FileOpenDialog("Datei ?", @ScriptDir, "Alle (*.*)")
$sSearch = InputBox("Suchstring ?","Geben Sie den zu suchenden Text ein:")
$FileData = FileRead($sFile)
$sFound = StringLeft($FileData, StringInStr($FileData, $sSearch))
$sOut = StringReplace($sFound, @LF, "")
Msgbox(0,"",@extended + 1)
Edit: Zeilentrenner in @LF geändert. Ist dann auch Linux kompatibel.