You probably built your execution string with an incorrect use of the backslashes.
It's important that you understand how backslashes work exactly.
Take the following statement:
strcpy(buffer,"c:\tools");
If you investigate the value of buffer in the debugger you will see something like this:
C:<tab>ools
( will probably be replaced by some visual spaces or nothing at all).
This is because \t is translated to the tab character by the compiler.
To get a correct buffer, you have to write this
strcpy(buffer,"c:\\tools");
The first backslash escapes the second one, ending up with only 1 backslash.
However, if you build up your buffer like this:
buffer[0] = 'c';
buffer[1] = ':';
buffer[2] = '\\';
buffer[3] = '\\';
buffer[4] = 't';
...
Then the buffer will be this:
c:\\tools
And will indeed contain 2 backslashes.
This is because it is the compiler that interprets the backslashes, not the runtime.
Conclusion: realize backslashes are interpreted by the compiler, and only if you use backslashes in constant strings or constant characters, they are interpreted. If you construct strings dynamically, there is no need to use 2 backslashes.