江依锦 發表於 2014-7-31 13:09:31

VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法

<p>通常用VB 写的程序在32位系统上可以正常的运行,但到了64位系统中虽然可以运行但是无法修改OEM信息。经过查找原因可以发现,当我们在访问文件夹"SYSTEM32"的时候系统会自动转向到文件夹"SYSWOW64"下,当我们在访问某些注册表键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面。</p>
<p>先来谈谈文件系统的转向,查找了一些资料,并没有VB相关的资料,但是可以查到2个相关函数:<span style="color: #0000ff">Wow64DisableWow64FsRedirection(关闭系统转向)和Wow64RevertWow64FsRedirection(打开系统转向)。<br />
</span>VB的声明如下:</p>
<div class="jb51code">
<pre class="brush:vb;">
Private Declare Function Wow64RevertWow64FsRedirection Lib "kernel32.dll" ()
Private Declare Function Wow64DisableWow64FsRedirection Lib "kernel32.dll" ()

</pre>
</div>
<p>然后<strong>用CALL Wow64DisableWow64FsRedirection语句来关闭文件系统的转向。</strong></p>
<p>再来谈谈注册表项的转向:<br />
<br />
这个依然没有VB方面的资料,但是知道有函数RegOpenEx(VB有这个函数,用法见API浏览器)可以决定是否转向,只要在函数的samDesired【Long】参数上加256(&amp;H100)就可以访问64位的注册表了。由于API访问注册表代码较多就不往上贴了。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>在双硬盘上安装独立32位和64位双系统</li><li>阿里云主机Windows 2008 32位 64位自助正版激活图文教程</li><li>Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法</li><li>C#中实现在32位、64位系统下自动切换不同的SQLite dll文件</li><li>安装SQL server 2005 出现警告 32位ASP.NET已经注册,需要注册64位的解决方法</li><li>PHP和MySql中32位和64位的整形范围是多少</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法