It returns a 0 because this is a "fire and forget" process. The process of launching a remote process only returns a value for the process of launching the process. It does NOT wait for the launched process to finish executing and return that exit code.
There is no in-built method to "Wait for exit" on a Win32_Process, so you can then get the exit code. You have to write a wrapper around the Win32_Process.Create call to implement that functionality.
Fortunately for you, someone already did that. You can find the code
here[
^].