如果在Vista中写入HKLM注册表时需要弹出UAC对话框,我们选择不使用Win32 Registry 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位的,使用WOW兼容性层运行REG.EXE命令,就像它是一个32位应用程序一样!:( 如果从命令行运行REG.EXE,则会以64位模式正确运行。这很重要,因为如果作为32位应用程序运行,由于注册表反射,注册表键将会出错。
那么有没有办法从32位应用程序中以编程方式启动64位应用程序,并且不像其父32位进程一样使用WOW64子系统(即任务管理器中的“*”后缀)?