This is possible by working around the enforced single-instance behaviour in .NETCF when running on Windows Mobile. See this blog post for details:-
http://blog.opennetcf.com/afeinman/PermaLink,guid,ec034858-e071-4daa-b1be-0323b7f54b11.aspx
Once you have done this you can rework the sub Main to manually check to see if your program is running - if it is you can send it the parameters either through a custom windows message or writing to file/registry and signalling a named event or an alternative interprocess communication (IPC) method.
The simplest would probably to use a MessageWindow in your app and set its text to some unique string which identifies your app. P/Invoke FindWindow passing this string constant to get a handle for your running application. If your MessageWindow is not found you use Application.Run to start your app normally. If a valid windows handle is returned you can send it a message (P/Invoke SendMessage or use the Microsoft.WindowsCE.Forms.MessageWindow functions) to notify it and then return from the Main function (don't call Application.Run) to end your second instance. If you want to pass the strings within the message you can use WM_COPYDATA which supports marshalling data between processes. This requires defining the COPYDATASTRUCT which is defined in the SDK headers. If you need more pointers I have examples somwhere but they are probably in C#
Regards,
Peter