2016-03-15 1 views
0

Mon programme est censé énumérer les périphériques OPOS installés. Ils sont répertoriés dans le registre si j'utilise RegOpenKeyEx comme ceci:RegOpenKeyEx ne trouve pas la clé de registre

LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OLEforRetail\\ServiceOPOS\\PosPrinter"), 0, KEY_READ , &key); 

Il fonctionne très bien sur mon ordinateur, mais se comporte bizarrement sur une autre machine (Windows 7 sp1 32 bits).

J'ai deux projets de test presque identiques (les deux sont des applications de dialogue mfc, la principale différence est celle créée avec Visual Studio 2005 et une autre en 2010). Dans l'un de ces projets, le code ci-dessus fonctionne bien, dans un autre RegOpenKeyEx renvoie ERROR_FILE_NOT_FOUND. En outre, cette clé ne peut pas être trouvée avec regedit.exe.

Qu'est-ce qui se passe même ici?

+0

S'agit-il d'un problème de [virtualisation du registre] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa965884 (v = vs.85) .aspx)? D'un autre côté, si regedit __and__ votre programme ne trouve pas la clé, c'est peut-être parce que la clé n'existe pas. –

Répondre

1

En outre, cette clé est introuvable avec regedit.exe.

Eh bien, vous devez vous assurer que vous accédez au registre avec le bon bit-ness. Sur le système d'exploitation 64 bits, "regedit.exe" ouvrira l'affichage 64 bits, pas 32 bits. Vous devez utiliser Windows\syswow64\regedit.exe pour ouvrir l'affichage 32 bits.

Vous ne pouvez pas ouvrir 32 bits ainsi que 64 bits regedit.exe, en même temps.

Pour votre programme, vous devez vérifier si elle est 32 bits ou 64 bits. Vous devez également vérifier si vous avez l'autorisation (vérifier l'indicateur UAC dans l'éditeur de liens). Une fois tout compris, vous pouvez activer ou désactiver la redirection de registre afin qu'un processus 32 bits puisse accéder au registre 64 bits, ou qu'un 64 bits puisse ouvrir une vue 32 bits du registre.

+0

La machine sur laquelle il ne fonctionne pas est une machine 32 bits, selon la question, donc je ne pense pas que ce soit le problème. –