Vous devez le brancher sur le planificateur de tâches, de sorte qu'il soit lancé après la connexion d'un utilisateur, en utilisant un compte d'utilisateur qui a un accès administratif sur le système, avec les privilèges les plus élevés qui sont accordés aux processus lancés par ce compte.
Il s'agit de l'implémentation utilisée pour démarrer automatiquement les processus avec des privilèges administratifs lors de la connexion en tant qu'utilisateur ordinaire.
Je l'ai utilisé pour lancer le processus d'aide 'OpenVPN GUI' qui a besoin de privilèges élevés pour fonctionner correctement, et donc ne pourrait pas être lancé correctement à partir de la clé de registre.
À partir de la ligne de commande, vous pouvez créer la tâche à partir d'une description XML de ce que vous voulez accomplir ; ainsi, par exemple, nous avons ceci, exporté de mon système, qui lancerait le bloc-notes avec les privilèges les plus élevés lorsque je me connecte :
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2015-01-27T18:30:34</Date>
<Author>Pete</Author>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<StartBoundary>2015-01-27T18:30:00</StartBoundary>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>CHUMBAWUMBA\Pete</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"c:\windows\system32\notepad.exe"</Command>
</Exec>
</Actions>
</Task>
et il est enregistré par un administrateur à l'invite de commande en utilisant :
schtasks /create /tn "start notepad on login" /xml startnotepad.xml
cette réponse devrait vraiment être déplacée vers l'un des autres sites de stackexchange, car il ne s'agit pas d'une question de programmation à proprement parler.
1 votes
Un problème peut-être plus important est que le programme est pas ne démarre pas du tout s'il n'y a pas d'utilisateur connecté. Il s'agit d'un mécanisme permettant de lancer un programme lors de la connexion (comme votre
.login
script sur Unix), et non pas à exécuter au moment du démarrage (comme certaines/etc/rc/...
script).0 votes
@Kaz : Dans le contexte de cette question, cela ne semble pas être un problème (à moins d'essayer d'observer l'interaction des enfants avec l'écran de connexion).