public override ResponseBase ExecuteRequest() { string vncDir = "..\\Common\\ThirdParty\\VNC\\"; string vncName = "OpenRM.winvnc.exe"; var result = new RunProcessResponse(); // Start VNC Server if (!IsProcessRunning(vncName)) { //add registry settings to let silent application start byte[] pass = { 1, 2, 3, 4, 5, 6, 7, 8 }; try { Registry.SetValue("HKEY_CURRENT_USER\\Software\\ORL\\WinVNC3", "Password", pass, RegistryValueKind.Binary); var proc = new RunProcessRequest( runId: 0, cmd: vncDir + vncName, args: "-run", workDir: vncDir, delay: 0, hidden: true, wait: false); result = (RunProcessResponse)proc.ExecuteRequest(); } catch (Exception ex) { Logger.WriteStr(" Cannot start VNC server due to error: " + ex.Message); } } // connect to VNC listener if (IsProcessRunning(vncName)) { string arguments = "-connect " + ViewerIp + "::" + ViewerPort + " -shareall"; Logger.WriteStr("Going to launch VNC server with parameters: " + arguments); var proc = new RunProcessRequest( runId: 0, cmd: vncDir + vncName, args: arguments, workDir: vncDir, delay: 0, hidden: true, wait: false); result = (RunProcessResponse)proc.ExecuteRequest(); } return(new RemoteControlResponse(result.ExitCode, result.ErrorMessage)); }
public override ResponseBase ExecuteRequest() { RunProcessResponse status = new RunProcessResponse(); // creates new object to return status.RunId = RunId; Thread.Sleep(Delay); Process newProcess = null; ProcessStartInfo execInfo = new ProcessStartInfo(); execInfo.FileName = Cmd; execInfo.Arguments = Args; execInfo.CreateNoWindow = false; execInfo.UseShellExecute = false; execInfo.RedirectStandardError = true; if (Hidden) { execInfo.WindowStyle = ProcessWindowStyle.Hidden; } try { Logger.WriteStr(" Executing process: \"" + Cmd + "\"..."); newProcess = Process.Start(execInfo); if (WaitForCompletion) { // wait for process completion newProcess.WaitForExit(Timeout); //wait maximum 30 min. } else { //Wait for window to finish loading. newProcess.WaitForInputIdle(); } if (!newProcess.HasExited) { if (newProcess.Responding) { if (WaitForCompletion) { status.ErrorMessage = " Process is still running, but we have reached timeout (30min)"; } else { status.ErrorMessage = " Process sucessfully started and will take some time to run..."; } } else { // not responding so kill it newProcess.Kill(); status.ExitCode = newProcess.ExitCode; status.ErrorMessage = " Process was not responding. We've terminated it."; } } else { status.ExitCode = newProcess.ExitCode; if (status.ExitCode > 0) { status.ErrorMessage = " Process completed with error. "; // not all processes have stderr } } } catch (Exception) { status.ErrorMessage = "ERROR: Unable to start \"" + Cmd + " " + Args + "\""; } finally { if (newProcess != null) { newProcess.Close(); } Logger.WriteStr(" \"" + Cmd + "\":" + status.ErrorMessage + "."); } return(status); }