Example #1
0
        public Task <int> Start()
        {
            try
            {
                var t1 = new StreamReader(_connection.ControlStream).ConsumeOutput(HandleControlStream);

                WaitHandle.WaitAny(new WaitHandle[] { tokenSwitchSuccessEvent.WaitHandle, _process.GetProcessWaitHandle(), _connection.DisconnectedWaitHandle });

                if (!tokenSwitchSuccessEvent.IsSet)
                {
                    Logger.Instance.Log(
                        _connection?.IsAlive ?? true
                            ? $"Failed to substitute token."
                            : $"Failed to substitute token. Connection from server lost."
                        , LogLevel.Error);

                    TerminateProcess();

                    return(Task.FromResult(Constants.GSUDO_ERROR_EXITCODE));
                }

                Logger.Instance.Log("Process token successfully substituted.", LogLevel.Debug);
                _ = _connection.FlushAndCloseAll();

                return(GetResult());
            }
            finally
            {
                ConsoleApi.SetConsoleCtrlHandler(ConsoleHelper.IgnoreConsoleCancelKeyPress, false);
            }
        }
Example #2
0
        public void WaitForExit(int waitMilliseconds = 10000)
        {
            if (!_testProcessHandle.GetProcessWaitHandle().WaitOne(waitMilliseconds))
            {
                NativeMethods.TerminateProcess(_testProcessHandle.DangerousGetHandle(), 0);
                Debug.WriteLine($"Process Std Output:\n{GetStdOut()}");
                //Debug.WriteLine($"Process Std Error:\n{GetStdErr()}");

                Assert.Fail("Process still active!");
            }
            Debug.WriteLine($"Process Std Output:\n{GetStdOut()}");
            //Debug.WriteLine($"Process Std Error:\n{GetStdErr()}");
            //NativeMethods.GetExitCodeProcess(_testProcessHandle, out ExitCode);
            ExitCode = _process?.ExitCode ?? ExitCode;
            _testProcessHandle.Close();
        }