Ziggy
Ziggy

Reputation: 332

64 & 32 bit system directory windows

Trying to find third issue in the database with no luck.

So, I'm developing on a 64bit system (windows seven). I'm making a simple console programme that check if a dll is present on the windows system. in that case I check in the system32 folder and then, in the sysWOW64 folder. The pro gramme is 32bit application.

On a 32bit target platform, I can check normally the win32dll, as the SysWOW64 directory doesn't exist, no problem. Bit when it execute on a 64bit system I can check the win32 directory, but the sysWOW64 directory always me point to the system32 directory.

It seems that on 64bit system there is a kind of redirection.

I'm trying to use the "Wow64DisableWow64FsRedirection" but I have "error C3861: 'Wow64DisableWow64FsRedirection': identifier not found" when I compile.

So there are two questions:

Upvotes: 1

Views: 2235

Answers (3)

JBirch
JBirch

Reputation: 649

While not perhaps what you're looking for, slightly wasteful if you know those are the only two places the file could be located, and possibly wouldn't work if the user has modified them (Although a whole host of other things will have broken for the user too), you could simply use the %Path% environmental variable.

Upvotes: 0

msteiger
msteiger

Reputation: 2044

You don't have to search for DLLs. LoadLibrary() and LoadLibraryEx() will automatically search all relevant folders for you.

The search order is as follows:

  1. The directory from which the application loaded.
  2. The system directory.
  3. The 16-bit system directory.
  4. The Windows directory
  5. The current directory.
  6. The directories that are listed in the PATH environment variable.

If you're sure that you want to disable the redirection you can do so with Wow64DisableWow64FsRedirection as you mentioned. To make it "work", you have to set

#define _WIN32_WINNT 0x0501 (or higher)

before you include windows.h

Upvotes: 2

Jonathan
Jonathan

Reputation: 12025

About How to determine if i'm currently on a 32 or 64 bit system, I think that you could check the size of an int pointer...

int bits = IntPtr.Size * 8;
Console.WriteLine( "{0}-bit", bits );

Upvotes: 0

Related Questions