用64位Windows进行开发的五点建议
2009-07-07 00:00:00 来源:WEB开发网WOW64之下的注册表将重定向与反射结合使用。重定向存在于HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node等Key之下。至少注册表中的命名式样更好。映射是32位进程和64位进程都可以编辑共同Key,如文件关联。另一方面讲,重定向是为了确保将32位从64位隔离开。
关键是执行不能影响你除非你打算从64位程序中获取32位程序的详细信息,反之亦然。通常汇编到同一目标要简单得多。例如,如果你想使用VS,将程序锁定到x86,你不需要担心文件或注册表的模拟过程。如果你要以Any CPU运行程序,那么就取决于它是如何启动的,或许你要使用重定向,和类似GetSystemWow64Directory的API调用,并且使用RegOpenKeyEx API,包括KEY_WOW64_32KEY的访问假象。它可能变成混乱而复杂的测试。这是目前为止对相同平台和锁定信息最好的汇编方式。
其中笔者偶然发现的一个问题是注册表反射和Windows Vista UAC的结合。在用于写入许可的HKLM蜂巢中笔者开放了一个Key,API成功了,但是当笔者向Key写入时,却失败了。应用程序以32位方式运行于Windows 64上,因此有问题的Key会被映射。笔者浪费了大量时间用于确定所发生的事情,因为注册表API不会向往常一样运作。最后,笔者通过往应用程序中包含运载单使之正常运行。即便requestedExecutionLevel对asInvoker有级别设置,这一漏洞也可以被修复。
UAC提供了注册表虚拟化,笔者认为WOW64重定向或反射与UAC虚拟化的结合太多了。现在笔者通常会确保应用程序中具备运载单。在VS 2008中,你可以从项目属性对话框中的程序标签中获取运载单。确保你包含了requestedExecutionLevel选项。
5.激活Edit和Continue
虽然,你可以调试64位应用程序,那么就不能在调试期间使用Edit和Continue。这意味着你不能在调试的时候改变源代码,相反你要停止,应用更改,重新编译并启动调试。但是你可以用32位程序使用Edit和Continue,即便是在64位Windows上。这是另一种手动构建配置的示例。
创建一个x86构建配置,并且在开发的时候使用这一配置,如此你就可以使用Edit和Continue。然后将配置切换称x64或Any CPU用于测试。
使用Windows 32或Windows 64不如VB 8或VB 9中那样难。使用VS并且构建配置,任务会变得简单。
更多精彩
赞助商链接