程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 32位程序在64位系統下運行中解決重定向問題,

C# 32位程序在64位系統下運行中解決重定向問題,

編輯:C#入門知識

C# 32位程序在64位系統下運行中解決重定向問題,


 

  在64位的Windows操作系統中,為了兼容32位程序的運行,64位的Windows操作系統采用重定向機制。目的是為了能讓32位程序在64位的操作系統不僅能操作關鍵文件文夾和關鍵的注冊表並且又要避免與64位程序沖突

  在64位的Windows操作系統上,可以運行32位的應用程序,這是通過一個叫做WOW64的模擬器來實現的。WOW64 是一個由操作系統提供的兼容性環境,它使得 32 位應用程序能夠在 Windows 64 位操作系統上運行,在系統的Windows目錄下,存在System32和SysWOW64兩個文件夾:

  System32文件夾下存放的是64位DLL

  SysWOW64文件夾下存放的是32位DLL

同樣的:

  64位的應用程序保存在Program File文件夾下

  32位的應用程序保存在Program File(X86)文件夾下

而注冊表相應的也有兩套。

即使指定了絕對路徑,如“%windir%/System32“,根據調用程序的不同,系統會自動重定向到相應的目錄。

禁止系統的重定向的解決辦法是調用下面的API函數

禁用系統重定向用下面的函數:

BOOL Wow64DisableWow64FsRedirection(PVOID OldValue);

恢復系統重定向用下面的函數:

BOOL Wow64RevertWow64FsRedirection(PVOID OldValue);

 

下面是在C#中對這兩個函數的引用:

// 關閉64位(文件系統)的操作轉向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); // 開啟64位(文件系統)的操作轉向 [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

省略相關代碼.......


IntPtr oldWOW64State = new IntPtr();
Wow64DisableWow64FsRedirection(ref oldWOW64State); // 關閉64位(文件系統)的操作轉向

省略相關代碼(如系統目錄下的文件操作).....

Wow64RevertWow64FsRedirection(oldWOW64State); // 開啟64位(文件系統)的操作轉向

 原文地址:http://www.cnblogs.com/iamlucky/p/5998086.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved