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));
        }
Exemple #2
0
        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);
        }