There are two ways that immeditately spring to mind. First is to pass the arguments in the Process.Start, eg.
Code:
String name = "foo";
String password = "bar";
String args = "name=" + name + "&password=" + password;
Process.Start("program.exe", args);
Another way would be to use Process.Start to start the program and then use WCF to send the data as an IPC.
This second method would be the most advantageous for many reasons. Cheifly the data you are passing between applications isn't limited to simple unencrypted strings. With named pipes you are sending byte arrays which can contain whatever you want.
For more information on WCF named pipes see here System.IO.Pipes Namespace ()