The problem is one of ProgramA is assuming the files are in the "current directory". That directory is not what you think it is.
You're launching your MCP program from a certain Program Files directory. You then launch ProgramA from a subdirectory. The "current directory" is NOT the one ProgramA was launched from. It's the MCP directory, where your files are not.
You have to get into the habit of building and using fully qualified paths when doing file operations. DO NOT just specify a filename and call it good. You just ran into why that's a bad idea.
In ProgramA, get the startup path and use Path.Combine to add your filename to it. You can get the startup path with the first answer
here[
^] .