Laden...

StartupManager - Autostarts verspätet starten

Erstellt von C#ler vor 11 Jahren Letzter Beitrag vor 11 Jahren 5.670 Views
C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren
StartupManager - Autostarts verspätet starten

Beschreibung:

Ich habe aus gegebenem Anlass ein Programm geschrieben, das verschiedene Autostart-Einträge um eine gewisse Zeit verschiebt, das heißt:
Wenn "StartupManager" gestartet wird, fängt die Zeit für die verbleibenden Programme an zu laufen. Nach bspw. 10 Sekunden wird dann das nächste Programm gestartet.

Ich habe dazu eine Klasse verwendet, die unter Icons aus Shell32.dll zu finden ist.

Die Konfiguration erfolgt über ein XML, das im Ordner der .EXE-Datei liegen muss.

Es ist folgendermaßen aufgebaut:


<?xml version="1.0"?>
<main>
	<startup id="0"><!-- fortlaufende Nummerierung (startet bei 0) -->
		<name>Realtek Audio Manager</name><!-- Anzeigename -->
		<process arguments="-s">C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe</process><!-- Speicherort mit Parametern, startet bspw. "(...)\HDA\RAVCpl64.exe -s" -->
		<delay>5</delay><!-- Verspätung in Sekunden nach Start von "StartupManager" -->
	</startup>
        <!-- weitere einträge -->
</main>

In diesem Beitrag findet ihr einen Screenshot, Source und Programm folgen.

Schlagwörter: Autostart, Verspätung, Delay, Startup

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

Hier das Programm mit einer Beispiel-XML-Datei (meine aktuelle Version)

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

...und hier der Sourcecode.

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

16.830 Beiträge seit 2008
vor 11 Jahren

Ich nutze schon eine ganze Zeit lang https://www.soluto.com/ - aber Deines hört sich auch sehr interessant an!
Danke für das Projekt!

1.346 Beiträge seit 2008
vor 11 Jahren

Hi

Habe mir gerade einmal den Source Code angesehen.

Du benutzt den System.Threading.Timer. Bei diesem muss man aufpassen. Man sollte bei diesem Referenzen auf die einzelnen Instanzen behalten, damit sie nicht vom GC disposed werden. Das ist mir schon passiert, siehe auch den Hinweis in Timer-Klasse.

LG pdelvo

F
10.010 Beiträge seit 2004
vor 11 Jahren

Wobei das ablegen der XML im Programmverzeichnis nicht der richtige Weg ist.

Startup Delayer benutze ich schon länger, das kommt auch mit elevationchanges zurecht.

1.820 Beiträge seit 2005
vor 11 Jahren

Hallo!

Sieht interessant aus. Schön wäre noch eine Option, Programme erst zu starten, wenn z.B. die CPU nur noch zu (z.B.) 20% beschäftigt ist, und bei Multi-Core-Systemen dann auf freie Kerne verteilt wird.

Nobody is perfect. I'm sad, i'm not nobody 🙁

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo zusammen,

ich nutze ganz simpel eine Batch-Datei mit sleeps (sleep.exe aus den GNU shellutils für Windows), die ich aus dem Autostart starte, die dann wiederum die zu startenden Programme startet. Die Batch-Datei ist dann quasi Delay-Programm und seine eigene Konfiguration in einem, hier ein Beispiel (Wartezeit in Sekunden):

sleep 20

cd /d "G:\Programme\Taskbar Shuffle\"
start taskbarshuffle.exe

sleep 2

cd /d "G:\tools\"
start quickres.exe

Das hat zwar zugegeben einen etwas rustikalen Charme, tut aber seinen Zweck.

Schön wäre noch eine Option, Programme erst zu starten, wenn z.B. die CPU nur noch zu (z.B.) 20% beschäftigt ist, und bei Multi-Core-Systemen dann auf freie Kerne verteilt wird.

Nach meiner Erfahrung sind es - ohne SSD - vor allem die vielen gleichzeitigen Festplattenzugriffe, die es durch das Delay zu vermeiden gilt, um das Starten der Programme zu beschleunigen bzw. die Reaktionsfähigkeit des Systems zu erhalten. Die CPU-Last ist nur ein recht indirekter Indikator für die I/O-Last, die somit eher als Schwellwert geeignet wäre. Außerdem ist im beschriebenen Sinne eine Verteilung auf mehrere Cores kontraproduktiv, weil der Flaschenhals nicht die CPU- sondern die Festplattenleistung ist. Das nur als Hinweise aus meiner Sicht, in welche Richtung eine mögliche Weiterentwicklung des Projekts aus dem Startbeitrag gehen sollte.

herbivore

U
1.688 Beiträge seit 2007
vor 11 Jahren

Hallo,

(sleep.exe aus den GNU shellutils für Windows)

falls die gerade nicht zur Verfügung steht, tut es auch das ping-Kommando 😁

ping -n 10 localhost > nul
C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

Hallo,

danke für das reichliche Feedback.

@Abt:
Soluto habe ich auch schon benutzt, mir hat allerdings die Web-Anbindung nicht gefallen.

@FZelle:
Ist XML allgemein (für diesen Zweck) falsch oder nur der Speicherort? Was schlägst du stattdessen vor?

@herbivore:
Das geht natürlich auch, hat allerdings dann keine Benachrichtigungen 😁
Außerdem trenne ich gerne Funktion von Daten.

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

B
357 Beiträge seit 2010
vor 11 Jahren

Speicherort sollte immer nach Möglichkeit das Dokumentenverzeichnis (bzw. Documents/Settings) des Nutzers sein. Packt der Nutzer das Programm nämlich in etwas wie C:\Programme, dann kann dort keine Änderung programmseitig ohne Adminrechte gespeichert werden und zudem gelten die vorgenommenen Einstellungen automatisch für alle Benutzer. Durfte ich auch schon lernen, geht unter XP, ab Vista nicht mehr. XML selbst ist schon in Ordnung.

Hinweis von herbivore vor 11 Jahren

Bitte hier in "Projekte" keine Fragen/Diskussion über die fachliche Umsetzung, siehe Lizenzbedingungen für .NET-Komponenten und C#-Snippets auf myCSharp.de. Dafür gibt es die Unterforen der Kategorie Entwicklung.

C
C#ler Themenstarter:in
48 Beiträge seit 2011
vor 11 Jahren

Hallo,

Ich habe jetzt den 2. und 3. Beitrag aktualisiert mit der neueren Version.

Änderungen:*Die Konfigurationsdatei liegt jetzt in %AppData%\StartupManager\config.xml *Ich behalte eine Referenz auf die Timer, damit sie nicht vom GC "eingesammelt" werden.

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon