我试过这段代码...... `CStringArray csaStartUpProgram;
csaStartUpProgram.Add(Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce);
csaStartUpProgram.Add(Software\\Microsoft\\Windows\\CurrentVersion\\Run);
csaStartUpProgram.Add(SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce);
csaStartUpProgram.Add(SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run);
for(int nStartupProgram=0;nStartupProgram<csaStartUpProgram.GetSize();nStartupProgram++)
{
HKEY hKey;
if (RegOpenKey(HKEY_LOCAL_MACHINE,csaStartUpProgram[nStartupProgram],&hKey) == ERROR_SUCCESS)
{
DWORD dwValues, dwMaxValueNameLen, dwMaxValueLen;
LONG lRet = ::RegQueryInfoKey(hKey,
NULL, NULL, // lpClass, lpcClass
NULL, // lpReserved
NULL, NULL, // lpcSubKeys, lpcMaxSubKeyLen
NULL, // lpcMaxClassLen
&dwValues,
&dwMaxValueNameLen,
&dwMaxValueLen,
NULL, // lpcbSecurityDescriptor
NULL); // lpftLastWriteTime
if(ERROR_SUCCESS == lRet)
{
// allocate enough to fit max. length name and value
LPTSTR pszName = new TCHAR[dwMaxValueNameLen + 1];
LPBYTE lpData = new BYTE[dwMaxValueLen];
for(DWORD dwIndex = 0; dwIndex < dwValues; dwIndex++)
{
DWORD dwNameSize = dwMaxValueNameLen + 1;
DWORD dwValueSize = dwMaxValueLen;
DWORD dwType;
lRet = ::RegEnumValue(hKey, dwIndex, pszName, &dwNameSize,0, &dwType, lpData, &dwValueSize);
CString strName = pszName;
if(REG_SZ == dwType)
{
CString strValue = (LPCTSTR)lpData;
}
CLog::Log(strName + _T(""));
}
delete []pszName;
delete []lpData;
}
}
}`
我得到了输出:
通讯, SAP_WUS_UNT, BCSSync, 通讯, SAP_WUS_UNT, BCSSync,
相同的输出重复两次,但我希望所有来自上面的程序启动路径,请帮助我......
答案 0 :(得分:0)
我相信你的程序是一个Win32程序,你试图在64位操作系统上运行。操作系统有一个名为Registry Redirector的特殊机制,允许32位应用程序访问64位环境中的单独注册表节点。基本上,每次打开Software\\Microsoft\\
密钥时,操作系统都会将您重定向到Software\\Wow6432Node\\Microsoft\\
密钥。因此,您正在阅读相同的密钥两次。
在上面超链接的文章中,他们说为了显式访问64位应用程序的节点,您需要使用此标志:KEY_WOW64_64KEY
KEY_WOW64_64KEY和KEY_WOW64_32KEY标志启用显式访问 分别到64位注册表视图和32位视图。对于 有关更多信息,请参阅访问备用注册表视图。
在侧节点上,我无法看到您关闭HKEY句柄的位置。用RegOpenKey
打开它后关闭它总是一个好主意。另外,请使用较新的API RegOpenKeyEx
。
要打开64位密钥,请使用以下代码:
::RegOpenKeyEx(
HKEY_LOCAL_MACHINE, //_In_ HKEY hKey,
csaStartUpProgram[nStartupProgram], //_In_opt_ LPCTSTR lpSubKey,
NULL, //_Reserved_ DWORD ulOptions,
KEY_WOW64_64KEY, //_In_ REGSAM samDesired,
&hKey //_Out_ PHKEY phkResult
);