Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
StartupManager - Autostarts verspätet starten
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

StartupManager - Autostarts verspätet starten

beantworten | zitieren | melden

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
Attachments
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
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Hier das Programm mit einer Beispiel-XML-Datei (meine aktuelle Version)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von C#ler am .
Attachments
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
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

...und hier der Sourcecode.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von C#ler am .
Attachments
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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.500

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.955

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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.

Zitat
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
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1.688

beantworten | zitieren | melden

Hallo,
Zitat von herbivore
(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
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
bredator
myCSharp.de - Member



Dabei seit:
Beiträge: 357

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von bredator am .
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (21.08.2012 - 17:22)

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#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers