64bit Windows 上で 32bit アプリケーションから 64bit アプリケーションを実行する方法

64bit版のWindowsでは、32bitアプリケーションを動作させるために、ファイルシステムリダイレクタという仕組みが使用されている。詳細は、File System Redirector - Windows applications | Microsoft Docs 等に記述されているが、簡単にいうと、以下のような仕組みになっている。
通常、アプリケーションがDLL等を読みに行く先は %windir%\System32\ 以下だが、ここには64bit用のものが置かれている。64bitアプリケーションであればこれで問題ないが、32bitアプリケーションの場合は32bit用のファイルを読む必要がある。しかし、ほとんどのDLLは32bitと64bitで同一の名前になっているため、32bit用のファイルは%windir%\SysWOW64\ 以下に置かれている。つまり、アプリケーションが32bitか64bitかで同一のDLLを読む場合でも見に行く先を変える必要がある。これをOSで制御して32bitの場合は透過的に%windir%\SysWOW64 を見せているのがファイルシステムリダイレクタ。
しかし、場合によってはこのリダイレクタが問題になることがある。
例えば、32bitアプリケーションから64bitアプリケーションを実行したい場合。
私が経験した例では、JP1/AJSから、batファイルを起動し、そこからPowerShellを起動し、PowerShellスクリプト内でOracle Clientを使用してOracle Databaseへアクセスする場合に困ったことがあった。JP1/AJSは32bitで、Oracle Clientは64bitアプリケーション。batファイルにはPowerShellのパスとしてC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeが記述されている。この状況で普通にJP1/AJSからジョブを実行すると、32bitのOracle ClientのDLLを読もうとして見つからずにエラーになってしまう。ファイルシステムリダイレクタにより、実際には、32bit版のC:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exeが実行されてしまうためだ。そういう場合は、以下のようなパスを指定することで、ファイルシステムリダイレクタを働かせずに64bit版のファイルを指定できる。
C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe
ちょっと面倒なのは、64bitアプリケーション上からC:\Windows\sysnative\を指定しても使用できないこと。このため、C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exeへ記述を修正したbatファイルをエクスプローラ等から直接実行してもパスが見つからずエラーになってしまう。C:\Windows\SysWOW64\cmd.exe 等32bitアプリケーションから実行する必要がある。試してはいないが、JP1/AJSからbatを実行する際に、C:\Windows\sysnative\cmd.exe を指定すればよいはず。