Autostart erst wenn Benutzer angemeldet (Batch?)

SpyderHead

Lt. Junior Grade
Registriert
Mai 2006
Beiträge
426
Hallo zusammen,

ich knoble aktuell an folgendem Problem:
Seit dem letzten größeren Update von Windows 10 werden Autostart-Elemente anscheinend bereits ausgeführt, noch bevor sich ein Benutzer angemeldet hat. Im Prinzip eine gute Sache, nur habe ich ein Programm im Autostart, dass damit ein Problem hat.
Anfangs habe ich erst einmal einfach das Programm über eine Batch-Datei im Autostart gestartet und darin den Start um 10 Sek. verzögert, um Zeit zu haben mich anzumelden. Ich hätte aber gerne eine Möglichkeit den aktuell angemeldeten Benutzer abzufragen bzw. ob überhaupt einer angemeldet ist. Dadurch könnte ich das ganze sauber lösen und den Start des Programms erst ausführen, wenn sich auch jemand am PC angemeldet hat.

Mein erster Gedanke war es nun, einfach die Systemvariable %username% auszulesen. Leider steht in dieser aber bereits mein Benutzer drin, noch bevor ich mich überhaupt angemeldet habe.
Der zweite Gedanke war es, über "qwinsta" abzufragen, ob (m)ein Benutzer als Aktiv gekennzeichnet ist. Auch hier steht aber wieder mein Benutzer als Aktiv drin, noch bevor ich mich überhaupt angemeldet habe.

Hier mal die 3 Versionen meiner Batch-Datei.
Grundversion - nur Zeitverzögert:
Code:
@echo Off
echo Off
*** Starte CMCC ***
c:
cd\
cd "C:\Program Files (x86)\CH Products"
ping localhost -n 11 >NUL
start CMCtlCtr.exe

Versuch 1 - Abfrage von %username%:
Code:
@echo Off & setlocal ENABLEDELAYEDEXPANSION
echo Off
echo *** Warte auf angemeldeten Benutzer ***
:wait
if %username% NEQ SpyderHead (
	goto :wait
)
REM ### Nur als Anzeige-Info für Test
echo %username%
REM ### Nur als Anzeige-Info für Test
echo *** Angemeldeten Benutzer erkannt. Starte CMCC ***
c:
cd\
cd "C:\Program Files (x86)\CH Products"
ping localhost -n 4 >NUL
start CMCtlCtr.exe

Versuch 2 - Abfrage mittels qwinsta:
Code:
@echo Off & setlocal ENABLEDELAYEDEXPANSION
echo Off
set cntactive=0
echo *** Warte auf angemeldeten Benutzer ***
:wait
for /f "tokens=1,2,3" %%k IN ('qwinsta /server:localhost ^| findstr "Aktiv"') DO @(
	REM ### Nur als Anzeige-Info für Test
	qwinsta /server:localhost
	REM ### Nur als Anzeige-Info für Test
	set /a cntactive +=1
)
if !cntactive! leq 0 (
	REM ### Nur als Anzeige-Info für Test
	echo .
	REM ### Nur als Anzeige-Info für Test
	ping localhost -n 2 >NUL
	goto :wait
)
echo *** Angemeldeten Benutzer erkannt. Starte CMCC ***
c:
cd\
cd "C:\Program Files (x86)\CH Products"
ping localhost -n 4 >NUL
start CMCtlCtr.exe

Die Grundversion mit der Zeitverzögerung funktioniert, solange ich mich eben innerhalb von 10 Sekunden anmelde. Die Versuche 1 und 2 funktionieren leider nicht, da laut den zum Test eingebauten Anzeige-Infos mein Benutzer bereits als angemeldet angesehen wird, noch bevor er angemeldet ist.

Vielleicht hat hier ja noch jemand eine Idee, was ich machen könnte oder vielleicht sogar eine Lösung für mein Problem. Ich bin für jeden Tipp dankbar :cool_alt:
 
Also es gibt unter Windows etliche Möglichkeiten, Programme bei Windows Start zu starten. Und es gibt auch Möglichkeiten, dies an einen jeweiligen Benutzer zu binden. Dazu brauchst Du nicht solche Umwege.

zB starten Programme, die hier eingetragen sind, auch erst dann, wenn der betreffende Benutzer sich angemeldet hat.

C:\Users\USER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Mit Autoruns aus der Sysinternals Suite kannst Du Dir das gut anschauen.
 
BlubbsDE schrieb:
zB starten Programme, die hier eingetragen sind, auch erst dann, wenn der betreffende Benutzer sich angemeldet hat.

C:\Users\USER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Die Batch-Datei ist im Startup-Ordner des Benutzers und wird dennoch noch vor der eigentlichen Anmeldung des Benutzers ausgeführt, das ist ja mein Problem.

Und auch laut Autoruns sollte die Batch-Datei erst beim Logon ausgeführt werden.
 
Das ist komisch. Hier ist das mit aktuellem Win 10 Build nicht so. Meldet der Benutzer sich über ein MS Konto an? Hier nutze ich ein lokales Konto. Vielleicht liegt es daran.
 
Nein, es handelt sich um ein lokales Konto.
Ja, das ist in der Tat seltsam, denn eigentlich sollten auch weder die Systemvariable noch qwinsta einen aktiven Benutzer anzeigen bzw. beinhalten, bevor er sich überhaupt angemeldet hat.
Und auch andere Elemente im Startup-Ordner werden noch vor der Anmeldung ausgeführt, es ist also nicht auf die Batch-Datei beschränkt.
Ergänzung ()

Ich habe die verursachende Einstellung gefunden. In den Kontoeinstellungen war unter Datenschutz die Funktion "Meine Anmeldeinfos verwenden, um die Geräteeinrichtung bei einem Update oder Neustart automatisch abzuschließen" aktiviert.
Ich habe sie jetzt mal deaktiviert und siehe da, alles im Startup-Ordner wird erst ausgeführt, nachdem der Benutzer angemeldet ist.

Nur finde ich diese Funktion eigentlich ganz praktisch, da es sowieso nur einen Benutzer gibt und der Start von Windows dadurch spürbar schneller ist. Also ist das Problem zwar lösbar, aber dennoch würde ich diese Funktion gerne nutzen, nur eben nicht für dieses eine Programm.
 
Na ja, entweder ein etwas schnellerer Start oder auf den Benutzer warten.
 
Vielleicht hat ja noch jemand eine Idee, was ich noch versuchen könnte. Mir gehen sie nämlich aus.
Ich habe eben sogar versucht das ganze noch weiter zu "verkomplizieren", indem über die Batch ein PowerShell Script ausgeführt wird und dessen Rückmeldung dann angibt, ob ein Benutzer angemeldet ist.
Aber selbst das PowerShell-Scipt gibt als aktiven Benutzer einen Wert zurück, noch bevor der Benutzer tatsächlich angemeldet ist.
Getestet habe ich im PowerShell Script die Funktion "Get-WmiObject win32_computersystem".
 
Beim Aufgabenplaner gibts doch extra den Punkt "bei der Anmeldung ausführen".
 
@HisN
Sobald in den Konto-Einstellungen unter Datenschutz die Funktion "Meine Anmeldeinfos verwenden, um die Geräteeinrichtung bei einem Update oder Neustart automatisch abzuschließen" aktiviert ist, sieht es so aus, als ob der zuletzt angemeldete Benutzer beim Start von Windows automatisch im Hintergrund bereits angemeldet wird. Also noch bevor man sich tatsächlich aktiv anmeldet.
Das wirkt sich eben sowohl auf den Startup-Ordner aus, als auch auf die Option "bei der Anmeldung ausführen" im Aufgabenplaner.

@BlubbsDE
Eine Zeitverzögerung ist ja das, was ich bereits habe (wenn auch über einen ping in einer Batch-Datei gelöst).
Ich konnte leider auch in der Ereignisanzeige von Windows noch kein Event finden, das ich dazu nutzen könnte die Aufgabe an dieses zu knüpfen, um den gewünschten Effekt zu erzielen.
 
Moin,

wenn ein Programm vor der Anmeldung ausgeführt werden soll, muss es als Dienst laufen. Nicht als Prozess, so kenne ich das zumindest?
Vielleicht hilft es ja.
 
@Peacer
Es geht nicht darum, etwas noch vor der Anmeldung auszuführen, sondern genau dies explizit zu verhindern. Und warum das ganze und warum es nicht so will, wie ich das gerne hätte habe ich weiter oben erläutert.
 
SpyderHead schrieb:
@HisN
Sobald in den Konto-Einstellungen unter Datenschutz die Funktion "Meine Anmeldeinfos verwenden, um die Geräteeinrichtung bei einem Update oder Neustart automatisch abzuschließen" aktiviert ist, sieht es so aus, als ob der zuletzt angemeldete Benutzer beim Start von Windows automatisch im Hintergrund bereits angemeldet wird. Also noch bevor man sich tatsächlich aktiv anmeldet.
Das wirkt sich eben sowohl auf den Startup-Ordner aus, als auch auf die Option "bei der Anmeldung ausführen" im Aufgabenplaner.

Oha, d.h. Du legst Dir da selbst Steine in den Weg? Denn (falls es wirklich an dem Klicker liegt) im Default-Zustand funktioniert das über die Aufgabenplanung ja einwandfrei. Du willst aber auf keinen Fall auf den von Dir genannten Klicker verzichten?
 
Ja, im Endeffekt lässt sich das ganze mit einem Klick lösen.
Nur wenn jemand eine Lösung für mein spezielles Problem hat, wäre ich dafür dankbar, da ich die Funktion eben gerne nutzen möchte. Im Endeffekt ist es also lediglich ein Luxus-Problem ;)
 
Das ist cool, dass Du uns so lange raten lässt, auch wenn Du die Ursache von Deinem Problem ja scheinbar schon vor dem 1. Post gekannt hast :-)
Hättest Du ruhig dazuschreiben können.
 
HisN schrieb:
Das ist cool, dass Du uns so lange raten lässt, auch wenn Du die Ursache von Deinem Problem ja scheinbar schon vor dem 1. Post gekannt hast :-)
Hättest Du ruhig dazuschreiben können.
Ich wusste es noch nicht vor dem 1. Post, daher auch die Ergänzung im Post #5 :p;)
 
KK. Hatte ich nicht gesehen.
Wie bist Du über die Ursache gestolpert?
 
Der Hinweis mit dem lokalen Konto hat mich dazu gebracht, nochmals die Kontoeinstellungen durch zu sehen. Und die Option kannte ich nicht, klang für mich aber danach, als ob sie was damit zu tun haben könnte. Also habe ich sie einfach mal deaktiviert, neu gestartet und geschaut was passiert. Und siehe da, der Autostart verhielt sich wieder wie früher (nur eben langsamer als mit der Option).
 
Zurück
Oben