我听说在Windows x64架构上,为了支持运行x86和x64应用程序,有两个独立/不同的Windows注册表集 - 一个用于x86应用程序访问,另一个用于x64应用程序访问?例如,如果COM在x86注册表集中注册CLSID,那么x64应用程序永远无法通过CLSID访问COM组件,因为x86/x64具有不同的注册表集?
所以,我的问题是我对上述样本的理解是否正确?我还想获得更多文档来学习这个主题,关于x64架构上的两个不同的注册表集.(我做了一些搜索,但没有找到任何有价值的信息.)
在Microsoft Visual C++中,我有以下代码来访问注册表中的路径.然后我读键的值Installed用RegQueryValueEx.到目前为止,这个值似乎很好,1这与我系统上Visual C++ 2010运行时的存在相对应.(它恰好是检测c ++运行时存在的一段代码).
现在当我查看时regedit.exe,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0我没有VC在树上看到.
这怎么可能?我在这个问题中复制/粘贴了所有路径和代码,所以它们必须是正确的.
C++应用程序中的代码:
HKEY RegistryKey;
DWORD ErrorCode;
DWORD RegDwordValue = 0;
DWORD RegDwordValueSize = sizeof(DWORD);
if((ErrorCode = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\VisualStudio\\10.0\\VC\\VCRedist\\x86",
0, //Reserved
KEY_READ,
&RegistryKey)) != ERROR_SUCCESS)
{
//Either the key does not exists, or registry access is denied. Anyway, detection did not succeed
std::cout << "Could not read registry path:\n\t" << lpcRegistryPath << "\n\tError code: " << ErrorCode;
return false;
}
if((ErrorCode = …Run Code Online (Sandbox Code Playgroud) 我支持旧的 Java 客户端应用程序,它可以在 Windows XP 上正常运行,但不能在 Windows 7 32 位上运行。问题出在用于启动应用程序的 BAT 文件中。BAT 文件包含的代码用于在注册表中查询 Java 的 CurrentVersion,然后使用该值来确定该 Java 版本在用户计算机上的路径。为了在 Java 客户端应用程序启动时将 rt.jar 包含在 CLASSPATH 中,这是必需的。以下代码在 Windows XP 上运行良好,但在 Windows 7 上返回:
“HKLM\SOFTWARE\JavaSoft\Java 运行时环境”\CurrentVersion 未找到。
:find_java
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion
::
:: get the current version
::
FOR /F "usebackq skip=4 tokens=3" %%A IN (`REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /v CurrentVersion 2^>nul`) DO (
set ValueValue=%%A
)
if defined ValueValue (
@echo the current Java runtime is %ValueValue% …Run Code Online (Sandbox Code Playgroud)