Pour afficher la boîte de dialogue UAC dans Vista lorsque vous écrivez dans la ruche HKLM, nous choisissons de ne pas utiliser l'API Win32 Registry, car lorsque les autorisations Vista sont manquantes, nous devons relancer l'ensemble de notre application avec des droits d'administrateur. Au lieu de cela, nous faisons cette astuce:Comment lancer un processus Windows en 64 bits à partir d'un code 32 bits?
ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);
Cette solution fonctionne très bien, en plus que notre application est un 32 bits l'un, et il exécute la commande REG.EXE que ce serait une application 32 bits en utilisant le WOW couche de compatibilité! :(Si REG.EXE est exécuté à partir de la ligne de commande, il est correctement exécuté en mode 64 bits, ce qui est important, car s'il est exécuté en tant qu'application 32 bits, les clés de registre se retrouveront au mauvais endroit en raison de registry reflection. Il est donc possible de lancer une application 64 bits par programmation à partir d'une application 32 bits et de ne pas l'exécuter à l'aide du sous-système WOW64 comme son processus parent 32 bits (par exemple, un suffixe "*" dans le Gestionnaire des tâches
Si cela fonctionne, cela ressemble à une bonne astuce à avoir dans son sac. –
sysnative ne fonctionnera pas sur XP64, c'est Vista et plus tard seulement. –
@DavidHeffernan: Donc vous piègez l'échec et essayez à nouveau en utilisant System32. –