Exemplo n.º 1
0
        // Start the Process
        private void Start(out string errorMessage, out string outputMessage)
        {
            errorMessage  = string.Empty;
            outputMessage = string.Empty;
            ErrorStream   = null;
            OutputStream  = null;

            try
            {
                pStartInfo.Arguments = this.command;
                process           = new Process();
                process.StartInfo = pStartInfo;
                process.Start();

                ErrorStream  = process.StandardError;
                OutputStream = process.StandardOutput;

                errorMessage  = ErrorStream.ReadToEnd();
                outputMessage = OutputStream.ReadToEnd();

                process.WaitForExit();
            }
            catch (Exception e)
            {
                this.ErrorMessage = e.Message;
            }
            finally
            {
                if (!process.HasExited)
                {
                    process.Close();
                }
            }
        }
Exemplo n.º 2
0
        private static void Test(int errorSize, bool failRequest)
        {
            var actualSize = errorSize + 128;
            //var data = new string('@', actualSize + bufferSize);
            //byte[] bytes = Encoding.UTF8.GetBytes(data);
            var bytes = CreateData(actualSize);

            // must precompute this and set in headers to avoid hash computation on ErrorStream
            // affecting the test
            var payloadhash = UtilityMethods.ToHex(UtilityMethods.ComputeSHA256(bytes), true);

            ErrorStream es = ErrorStream.Create(bytes);

            if (failRequest)
            {
                es.MaxReadBytes = errorSize;
            }
            // 1 rewind for S3 pre-marshallers which reset position to 0
            // 1 rewind for exception at error size
            es.MinRewinds = 2;

            var putRequest = new PutObjectRequest
            {
                BucketName      = bucketName,
                Key             = "foo1",
                AutoCloseStream = false
            };

            putRequest.Headers["x-amz-content-sha256"] = payloadhash;
            putRequest.InputStream = es;

            CallWithTimeout(() => Client.PutObject(putRequest), TimeSpan.FromSeconds(10));
        }
Exemplo n.º 3
0
 public void Evaluate(string expression)
 {
     try {
         object result;
         bool   result_set;
         ErrorStream.Clear();
         string ret = this.Evaluator.Evaluate(expression, out result, out result_set);
         if (result_set)
         {
             if (result is ILScene)
             {
                 Panel.Scene = (result as ILScene);
             }
             else
             {
                 m_shell.WriteText(Environment.NewLine);
                 m_shell.WriteText(result.ToString());
             }
         }
         else if (ErrorStream.Length > 0)
         {
             m_shell.WriteError(ErrorStream.ToString());
         }
         Panel.Configure();
         Panel.Refresh();
     } catch (Exception exc) {
         m_shell.WriteError(exc.ToString());
     }
 }
Exemplo n.º 4
0
        public void TestStreamRetry2()
        {
            string data = "sample data";

            byte[] bytes = Encoding.UTF8.GetBytes(data);

            // must precompute this and set in headers to avoid hash computation on ErrorStream
            // affecting the test
            var         payloadhash = UtilityMethods.ToHex(UtilityMethods.ComputeSHA256(bytes), true);
            ErrorStream es          = ErrorStream.Create(bytes, readOnly: true);

            es.MaxReadBytes = 3;
            int requestCount = 0;

            es.OnRead += (s, e) =>
            {
                if (++requestCount == 2)
                {
                    throw new WebException("Fake WebException", WebExceptionStatus.KeepAliveFailure);
                }
            };
            var putRequest = new PutObjectRequest
            {
                BucketName  = bucketName,
                Key         = "foo",
                InputStream = es,
                Headers     = { ContentLength = data.Length },
            };

            putRequest.Headers["x-amz-content-sha256"] = payloadhash;

            var exception = AssertExtensions.ExpectException <AmazonServiceException>(() => Client.PutObject(putRequest));

            es = ErrorStream.Create(bytes, readOnly: true);
            es.MaxReadBytes = 3;
            putRequest      = new PutObjectRequest
            {
                BucketName  = bucketName,
                Key         = "foo",
                InputStream = es,
                Headers     = { ContentLength = data.Length },
            };
            putRequest.Headers["X-Amz-Content-SHA256"] = payloadhash;
            Client.PutObject(putRequest);

            string responseData;

            using (var responseStream = Client.GetObject(new GetObjectRequest
            {
                BucketName = bucketName,
                Key = putRequest.Key
            }).ResponseStream)
                using (StreamReader reader = new StreamReader(responseStream))
                {
                    responseData = reader.ReadToEnd();
                }

            Assert.AreEqual(data, responseData);
        }
Exemplo n.º 5
0
        public void WriteError(ErrorRecord errorRecord)
        {
            var psobj = PSObject.AsPSObject(errorRecord);

            // if merged with stdout, we can later on check to which stream the object usually belongs
            psobj.WriteToErrorStream = true;
            ErrorStream.Write(psobj);
            ExecutionContext.AddToErrorVariable(errorRecord);
            if (MergeErrorToOutput)
            {
                OutputStream.Write(psobj);
            }
        }
Exemplo n.º 6
0
        public static void Error(object value)
        {
            string txt = ErrorPrefix + value.ToString();

            if (AutomaticNewline)
            {
                ErrorStream.WriteLine(txt);
            }
            else
            {
                ErrorStream.Write(txt);
            }
        }
Exemplo n.º 7
0
        public void Dispose()
        {
            if (!IsDisposed)
            {
                FinishStream();
            }

            IsDisposed = true;

            InStream?.Dispose();
            OutStream?.Dispose();
            ErrorStream?.Dispose();
        }
Exemplo n.º 8
0
        public void TestStreamRetry1()
        {
            string data = "sample data";

            byte[] bytes = Encoding.UTF8.GetBytes(data);
            // must precompute this and set in headers to avoid hash computation on ErrorStream
            // affecting the test
            var         payloadhash = UtilityMethods.ToHex(UtilityMethods.ComputeSHA256(bytes), true);
            ErrorStream es          = ErrorStream.Create(bytes);

            es.MaxReadBytes = 3;
            int requestCount = 0;

            es.OnRead += (s, e) =>
            {
                if (++requestCount == 2)
                {
                    throw new IOException("Fake Exception");
                }
            };
            var putRequest = new PutObjectRequest
            {
                BucketName      = bucketName,
                Key             = "foo1",
                InputStream     = es,
                AutoCloseStream = false
            };

            putRequest.Headers["x-amz-content-sha256"] = payloadhash;
            Client.PutObject(putRequest);

            string responseData;

            using (var responseStream = Client.GetObject(new GetObjectRequest
            {
                BucketName = bucketName,
                Key = putRequest.Key
            }).ResponseStream)
                using (StreamReader reader = new StreamReader(responseStream))
                {
                    responseData = reader.ReadToEnd();
                }

            Assert.AreEqual(data, responseData);

            requestCount           = 0;
            putRequest.InputStream = es;
            Client.PutObject(putRequest);

            TestStreamRetry2();
        }
Exemplo n.º 9
0
        public void Dispose()
        {
            if (!_isDisposed)
            {
                if (_objectsToDispose != null)
                {
                    foreach (var h in _objectsToDispose)
                    {
                        h.Dispose();
                    }
                }

                _inputReadPipe?.Dispose();
                _outputWritePipe?.Dispose();
                _errorWritePipe?.Dispose();
                InputStream?.Dispose();
                OutputStream?.Dispose();
                ErrorStream?.Dispose();
                _isDisposed = true;
            }
        }
Exemplo n.º 10
0
 public void Evaluate(string expression)
 {
     try {
         object result;
         bool   result_set;
         ErrorStream.Clear();
         string ret = this.Evaluator.Evaluate(expression, out result, out result_set);
         if (result_set)
         {
             if (result is ILScene)
             {
                 if (m_cleanUpExample != null)
                 {
                     m_cleanUpExample();
                     m_cleanUpExample = null;
                 }
                 PanelForm.Panel.Scene = (result as ILScene);
             }
             else
             {
                 m_shell.WriteText(Environment.NewLine);
                 m_shell.WriteText(result.ToString());
             }
         }
         else if (ErrorStream.Length > 0)
         {
             m_shell.WriteError(ErrorStream.ToString());
         }
         PanelForm.Panel.Configure();
         PanelForm.Panel.Refresh();
     } catch (ArgumentException exc) {
         m_shell.WriteError(exc.Message.ToString());
     } catch (ILNumerics.Exceptions.ILArgumentException exc) {
         m_shell.WriteError(exc.Message.ToString());
     } catch (Exception exc) {
         m_shell.WriteError(exc.ToString());
     }
 }
Exemplo n.º 11
0
 public void WriteErrorLine(string line) => ErrorStream.Write(line + EndOfLine);
Exemplo n.º 12
0
 public void WriteError(object value)
 {
     ErrorStream.Write(value);
 }
 public Stream Any(ErrorStream request)
 {
     throw new NotImplementedException("Exception in Stream Response");
 }
Exemplo n.º 14
0
        /// <summary>
        /// Runs a process.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="arguments">The arguments.</param>
        /// <param name="workingDirectory">The working directory.</param>
        public async Task StartProcessAsync(string fileName, string arguments, string workingDirectory = null)
        {
            //  Are we showing diagnostics?
            if (ShowDiagnostics)
            {
                await WriteOutputAsync("Preparing to run " + fileName, Color.FromArgb(255, 0, 255, 0));

                if (!string.IsNullOrEmpty(arguments))
                {
                    await WriteOutputAsync(" with arguments " + arguments + "." + Environment.NewLine, Color.FromArgb(255, 0, 255, 0));
                }
                else
                {
                    await WriteOutputAsync("." + Environment.NewLine, Color.FromArgb(255, 0, 255, 0));
                }
            }


            await CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
            {
                try
                {
                    var result = await ProcessLauncher.RunToCompletionAsync(
                        fileName,
                        arguments,
                        new ProcessLauncherOptions
                    {
                        WorkingDirectory = workingDirectory,
                        StandardOutput   = OutputStream,
                        StandardError    = ErrorStream
                    });

                    using (var outStreamRedirect = OutputStream.GetInputStreamAt(0))
                    {
                        var size = OutputStream.Size;
                        using (var dataReader = new DataReader(outStreamRedirect))
                        {
                            var bytesLoaded = await dataReader.LoadAsync((uint)size);
                            var stringRead  = dataReader.ReadString(bytesLoaded);
                            await WriteOutputAsync(stringRead, Colors.White);
                        }
                    }

                    using (var errStreamRedirect = ErrorStream.GetInputStreamAt(0))
                    {
                        using (var dataReader = new DataReader(errStreamRedirect))
                        {
                            var size        = ErrorStream.Size;
                            var bytesLoaded = await dataReader.LoadAsync((uint)size);
                            var stringRead  = dataReader.ReadString(bytesLoaded);
                            await WriteOutputAsync(stringRead, Colors.Red);
                        }
                    }
                }
                catch (UnauthorizedAccessException uex)
                {
                    await WriteOutputAsync($"Exception Thrown: {uex.Message}{Environment.NewLine}", Colors.Red);
                    await WriteOutputAsync($"Make sure you're allowed to run the specified exe; either{Environment.NewLine}" +
                                           $"\t1) Add the exe to the AppX package, or{Environment.NewLine}" +
                                           $"\t2) Add the absolute path of the exe to the allow list:{Environment.NewLine}" +
                                           $"\t\tHKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\EmbeddedMode\\ProcessLauncherAllowedExecutableFilesList.{Environment.NewLine}{Environment.NewLine}" +
                                           $"Also, make sure the <iot:Capability Name=\"systemManagement\" /> has been added to the AppX manifest capabilities.{Environment.NewLine}", Colors.Red);
                }
                catch (Exception ex)
                {
                    await WriteOutputAsync($"Exception Thrown: {ex.Message}{Environment.NewLine}", Colors.Red);
                    await WriteOutputAsync($"{ex.StackTrace}{Environment.NewLine}", Colors.Red);
                }
            });
        }