Clé de Registre RunOnce

Toutes les versions de Windows prennent en charge une clé de Registre, RunOnce, qui peut être utilisée pour spécifier des commandes que le système exécutera une seule fois, puis supprimera. La création de clés de Registre RunOnce peut être effectuée à partir d’un package de pilotes.

Notes

La création d’une clé de Registre RunOnce pour autre chose que les appareils SWENUM logiciels uniquement n’est pas conforme à l’isolation du package de pilotes et ne peut pas être effectuée à partir d’un pilote Windows.

Dans Windows 8 et Windows 8.1, les entrées RunOnce pour l’installation d’appareils SWENUM logiciels uniquement sont traitées pendant l’installation de l’appareil. D’autres entrées RunOnce sont ajoutées à la clé RunOnce . Celles-ci sont appliquées la prochaine fois que le système traite la clé RunOnce . L’installation de l’appareil ne force pas le système à traiter les entrées RunOnce .

Dans Windows 7 et les versions antérieures, immédiatement après l’installation d’un appareil, Windows exécute la commande stockée sous la clé RunOnce , puis supprime la clé. En outre, chaque fois que le système démarre, il exécute la commande stockée sous la clé RunOnce , puis supprime la clé. Par conséquent, si vous placez une commande sous la clé RunOnce , vous ne pouvez pas facilement prédire quand elle est exécutée.

Immédiatement après l’installation d’un appareil, Windows exécute la commande stockée sous la clé RunOnce , puis supprime la clé. En outre, chaque fois que le système démarre, il exécute la commande stockée sous la clé RunOnce , puis supprime la clé. Par conséquent, si vous placez une commande sous la clé RunOnce , vous ne pouvez pas facilement prédire quand elle est exécutée.

Pour les installations d’appareils, les clés de Registre RunOnce peuvent être créées à l’aide de add-registry-sections, qui sont spécifiées par le biais des directives INF AddReg. Chaque section add-registry a la syntaxe suivante :

reg-root, [subkey], [value-entry-name], [flags], [value]

Les valeurs de la racine de Registre (reg-root) et de la sous-clé pour la clé de Registre RunOnce sont les suivantes :

HKLM, « Software\Microsoft\Windows\CurrentVersion\RunOnce »

La chaîne value-entry-name est omise d’une entrée de Registre RunOnce . Le type de l’entrée, qui est indiqué par la valeur Flags , doit être REG_SZ (valeur Flags de 0x00000000) ou REG_EXPAND_SZ (valeur Flags de 0x00010000). Pour une entrée de type REG_SZ (valeur par défaut), la valeur Flags peut être omise .

Le paramètre value dans une clé RunOnce spécifie la commande à exécuter. Ce paramètre est une chaîne entre guillemets au format suivant :

Rundll32[.exe] DllName,EntryPoint[Arguments]

Par défaut, une clé RunOnce est supprimée après l’exécution de la commande spécifiée. Vous pouvez préfixer un paramètre de valeur de clé RunOnce avec un point d’exclamation (!) pour différer la suppression de la clé jusqu’à ce que la commande s’exécute correctement. Sans le préfixe du point d’exclamation, si la commande spécifiée échoue, la clé RunOnce est toujours supprimée et la commande ne sera pas exécutée lors du prochain démarrage du système.

En outre, par défaut, les clés RunOnce sont ignorées lorsque le système est démarré en mode sans échec. Le paramètre value des clés RunOnce peut être précédé d’un astérisque (*) pour forcer l’exécution de la commande même en mode sans échec.

Tenez compte des instructions suivantes lorsque vous créez une entrée de chaîne de valeur :

  • Rundll32 peut apparaître avec ou sans son extension de nom de fichier.exe .

  • DllName est le chemin d’accès complet d’une DLL ou d’une image exécutable. À l’exception d’une virgule de fin obligatoire, l’expression ne doit pas contenir de virgules. Si aucune extension de nom de fichier n’est fournie, l’extension par défaut est .dll.

  • EntryPoint est le nom du point d’entrée dans la DLL indiqué par DllName.

  • Arguments est une sous-chaîne facultative qui contient tous les arguments qui doivent être passés à la DLL spécifiée.

  • Un seul espace doit séparer la chaîne EntryPoint de la sous-chaîne Arguments .

L’exemple de code suivant montre l’entrée add-registry-section qui stocke une commande et ses arguments sous la clé RunOnce :

;; WDMAud swenum install

HKLM,%RunOnce%,"WDM_WDMAUD",,\
"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_WDMAUD.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_WDMAUD%,%17%\WDMAUDIO.inf,WDM_WDMAUD.Interface.Install"

[Strings]
RunOnce = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
WDM_WDMAUD.DeviceId = "{CD171DE3-69E5-11D2-B56D-0000F8754380}"
KSNAME_Filter = "{9B365890-165F-11D0-A195-0020AFD156E4}"
KSCATEGORY_WDMAUD = "{3E227E76-690D-11D2-8161-0000F8775BF1}"

Les règles suivantes s’appliquent lorsque vous utilisez des clés de Registre RunOnce pour les installations d’appareils :

  • Ces clés de Registre doivent être utilisées uniquement pour les installations d’appareils logiciels uniquement énumérés par SWENUM, l’énumérateur de périphériques logiciels.

  • Les clés RunOnce doivent se composer uniquement d’appels à Rundll32.exe. Sinon, WHQL ne signera pas numériquement le package de pilotes.

  • Le code à exécuter ne doit pas inviter l’utilisateur à entrer.

  • Les installations côté serveur s’exécutent dans un contexte système. Pour cette raison, vous devez être certain que le code à exécuter ne contient aucune faille de sécurité et que les autorisations de fichier empêchent la modification malveillante du code.

  • À compter de Windows Vista, le système n’exécute pas les commandes spécifiées par les clés RunOnce si un utilisateur sans privilèges d’administrateur est connecté au système. Cela peut entraîner des installations incomplètes ou endommagées après un redémarrage du système.

    Avant que l’application d’installation de l’appareil ne crée les entrées RunOnce , elle informe l’utilisateur actuel qu’un utilisateur disposant de privilèges d’administrateur doit se connecter après un redémarrage du système.

    Pour plus d’informations, consultez Développement d’applications qui s’exécutent à l’ouverture de session sur Windows Vista.