With regards to your change directory problem, whenever you run a separate process, that process will inherit the environment of the caller (your program). So when you run an execShellCmd, the cd command works, but shortly after the process finishes and the changes are gone with it. If you were to run a chain of commands inside a single execShellCmd call you could see the first affecting the latter.
The solution is to change the current working directory for your process, so that future processes will inherit that. You can do that with the setCurrentDir proc.
it's crash why??
I don't know. Submit a proper bug report please.