c – 如何从32位代码启动64位的Windows进程?

在写入HKLM注册表配置单元时,要在Vista中弹出UAC对话框,我们选择不使用Win32注册表API,因为缺少Vista权限时,我们需要以管理员权限重新启动整个应用程序.相反,我们做这个技巧:
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);

该解决方案工作正常,除了我们的应用程序是32位,它运行REG.EXE命令,因为它将是一个32位应用程序使用WOW兼容性层! :(如果REG.EXE是从命令行运行的,它正常运行在64位模式,这很重要,因为如果它作为一个32位应用程序运行,注册表项将由于registry reflection而在错误的地方.

那么有没有办法通过32位应用程序以编程方式启动64位应用程序,而不是使用WOW64子系统(如其父级32位进程)(即任务管理器中的“*”后缀)来运行64位应用程序?

解决方法

尝试这个(从32位进程):
> %WINDIR%\sysnative\reg.exe query ...

(发现here).

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...