हां, वर्चुअलाइजेशन बहुत कम स्तर पर होता है। File.Exists विधि मूल रूप से Win32 CreateFile विधि को कॉल करता है और त्रुटियों के लिए जांच करता है। CreateFile को वाह उपप्रणाली द्वारा पुनर्निर्देशित किया जाता है।
आप कॉल करने से पहले अस्थायी रूप से वर्चुअलाइजेशन अक्षम कर सकते हैं।
[DllImport("kernel32", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr oldValue);
[DllImport("kernel32", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr oldValue);
बेशक
पूरा आप बंद के रूप में पर वर्चुअलाइजेशन के साथ फाइल होने की जाँच करने के साथ ही होगा होने के लिए। रजिस्ट्री प्रविष्टियों की जांच के लिए भी यही लागू होता है।
public static bool FileExists(string path)
{
if(File.Exists(path)) return true;
IntPtr oldValue = IntPtr.Zero;
try
{
if(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") == null)
return false;
Wow64DisableWow64FsRedirection(ref oldValue);
if(File.Exists(path)) return true;
return false;
}
finally
{
if(oldValue != IntPtr.Zero)
Wow64RevertWow64FsRedirection(ref oldValue);
}
}
अद्यतन: तुम भी क्योंकि XP के पुराने संस्करणों (पूर्व SP2 मेरा मानना है कि) उन तरीकों के संपर्क में न वाह पुनर्निर्देशन अक्षम करने से पहले OS संस्करण जांच करने की आवश्यकता हो सकती है।
अपडेट 2: 64-बिट के लिए ओएस चेक जोड़ा गया। ओएस के सभी 64-बिट संस्करण इन तरीकों को लागू करते हैं और 64-बिट ओएस पर चलने पर आपको केवल सैट को अक्षम करने की आवश्यकता होती है।
स्रोत
2009-05-26 21:04:13
मेरे लिए ठीक काम करता है। आपका पर्यावरण क्या है? – Noldorin