diff -Nur cvs/seamlessrdp/ServerExe/main.c connection_sharing/seamlessrdp/ServerExe/main.c
--- cvs/seamlessrdp/ServerExe/main.c	2008-03-07 22:27:12.000000000 +1100
+++ connection_sharing/seamlessrdp/ServerExe/main.c	2008-03-11 10:11:34.000000000 +1100
@@ -192,6 +192,31 @@
 }
 
 static void
+do_spawn(char *cmdline)
+{
+	PROCESS_INFORMATION proc_info;
+	STARTUPINFO startup_info;
+
+	memset(&startup_info, 0, sizeof(STARTUPINFO));
+	startup_info.cb = sizeof(STARTUPINFO);
+
+	if (!CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0,
+			       NULL, NULL, &startup_info, &proc_info))
+	{
+		// CreateProcess failed.
+		char msg[256];
+		_snprintf(msg, sizeof(msg),
+			"Unable to launch the requested application:\n%s", cmdline);
+		message(msg);
+		return;
+	}
+
+	// Release handles
+	CloseHandle(proc_info.hProcess);
+	CloseHandle(proc_info.hThread);
+}
+
+static void
 process_cmds(void)
 {
 	char line[VCHANNEL_MAX_LINE];
@@ -227,6 +252,8 @@
 				   (HWND) strtoul(tok4, NULL, 0));
 		else if (strcmp(tok1, "FOCUS") == 0)
 			do_focus(strtoul(tok2, NULL, 0), (HWND) strtoul(tok3, NULL, 0));
+		else if (strcmp(tok1, "SPAWN") == 0)
+			do_spawn(tok3);
 		else if (strcmp(tok1, "DESTROY") == 0)
 			do_destroy((HWND) strtoul(tok3, NULL, 0));
 	}
