Exemplo n.º 1
0
        public static ProcessStartInfo Create(
            string name,
            string args,
            string?workingDirectory = null,
            bool captureOutput      = true,
            string?windowsName      = null,
            string?windowsArgs      = null,
            Action <IDictionary <string, string> >?configureEnvironment = null)
        {
            var isWindows = FeatureDetector.IsWindows();

            var startInfo = new ProcessStartInfo
            {
                FileName               = isWindows ? (windowsName ?? name) : name,
                Arguments              = isWindows ? (windowsArgs ?? args) : args,
                WorkingDirectory       = workingDirectory ?? Environment.CurrentDirectory,
                UseShellExecute        = false,
                RedirectStandardError  = captureOutput,
                RedirectStandardOutput = captureOutput,
                //On windows dotnet core seams to set the codepage to 850
                //see: https://github.com/dotnet/runtime/issues/17849#issuecomment-353612399
                StandardOutputEncoding = isWindows
                    ? Encoding.GetEncoding(850) //DOS-Latin-1
                    : Encoding.Default,
            };

            configureEnvironment?.Invoke(startInfo.Environment);

            return(startInfo);
        }
Exemplo n.º 2
0
        private static async Task <Stream> CreateStream(Uri connectionString, CancellationToken token = default)
        {
            _ = connectionString ?? throw new ArgumentNullException(nameof(connectionString));

            var serverName = FeatureDetector.IsWindows() ? connectionString.Host : ".";

            // TODO: write a connection string parser once we introduce the next transport
            var connectionId = connectionString.Segments[1];
            var stream       = new NamedPipeClientStream(serverName, connectionId, PipeDirection.InOut, PipeOptions.Asynchronous);
            await stream.ConnectAsync(token).ConfigureAwait(false);

            return(stream);
        }