On a MS Windows XP Pro. x64 (64-bit) Edition I installed ActiveState
ActiveTcl 8.4.14.0 (the 32-bit x86 distribution that is available as a
free download).
I noticed problems with invoking some system tools from the Tcl
scripts (which run in a 32-bit tclsh process). The problems are caused
by the way the WOW64 subsystem works in Windows x64. Namely,
the "%SystemRoot%\system32" directory is used for 64-bit DLLs and
EXEs, while
the "%SystemRoot%\SysWOW64" directory is used for 32-bit DLLs and
EXEs.
Some of the system files are present in both directories, i.e. they
have
64-bit and 32-bit versions, but some have only 64-bit version.
When executing 32-bit applications, the WOW64 subsystem makes files in
%SystemRoot%\system32 inaccessible to the application. The
application sees %SystemRoot%\sysWOW64 as %SystemRoot%\system32.
For example it is not possible to invoke ntbackup.exe from a Tcl
script as there is only 64-bit version of ntbackup.exe (in
%SystemRoot%\system32).
Is there a workaround for this problem besides copying the
inaccessible files from %SystemRoot%\system32 to another directory
that is accessible to 32-bit applications?
I hope some day the 64-bit binary distributions of the ActiveTcl
package will be available as a free download.
-- rpr. /Robert Premuz/
The only workaround i can think of is to spwan a cmd.exe proccess and
ask it to run the 64bit application. I am not sure it will work but
it's worth a try.
Instead of running
ntbackup.exe
try to run
cmd.exe /c ntbackup.exe
or something like this.
good luck,
/NL
Your suggestion to spawn a cmd.exe process doesn't help here.
When you invoke cmd.exe from tclsh.exe (a 32-bit application) you
start 32-bit version of cmd.exe i.e. %SystemRoot%\SysWOW64\cmd.exe.
This 32-bit cmd.exe also can't access
%SystemRoot%\system32\ntbackup.exe (64-bit application).
You can start the 64-bit ntbackup.exe only if it is somewhere outside
of %SystemRoot%\system32 tree.
-- rpr. /Robert Premuz/