【问题标题】:Partial TaskAwaiter example. How to implement?部分 TaskAwaiter 示例。如何实施?
【发布时间】:2021-12-25 23:53:17
【问题描述】:

在文章await anything; 中有一个我想使用的部分示例,但它没有显示实现。

具体来说:

例如,考虑想要启动另一个进程,然后 异步等待该过程完成,例如

await Process.Start(“Foo.exe”);

您可以使用如下所示的 GetAwaiter 方法来做到这一点:

public static TaskAwaiter<int> GetAwaiter(this Process process)
{
    var tcs = new TaskCompletionSource<int>();
    process.EnableRaisingEvents = true;
    process.Exited += (s, e) => tcs.TrySetResult(process.ExitCode);
    if (process.HasExited) tcs.TrySetResult(process.ExitCode);
    return tcs.Task.GetAwaiter();
}

我目前使用的代码:

using System;
using System.Diagnostics;

namespace asynchawait
{
    internal class Program
    {
        static Process opensslP1;
        static Process opensslP2;
        static Process opensslP3;
        static void Main(string[] args)
        {
            Run();

            Console.ReadKey();
        }

        static void Run()
        {

            /**
             * OpenSSL - Show version info
             * 
             * $ openssl version
             * 
             *   Output text: OpenSSL 3.1.0-dev  (Library: OpenSSL 3.1.0-dev )
             * 
             */
            opensslP1 = new Process();

            opensslP1.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
            opensslP1.StartInfo.FileName = @"openssl.exe";
            opensslP1.StartInfo.Arguments = @"version";
            opensslP1.StartInfo.RedirectStandardOutput = true;
            opensslP1.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
            opensslP1.StartInfo.UseShellExecute = false;
            opensslP1.StartInfo.ErrorDialog = true;
            //opensslP1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            opensslP1.EnableRaisingEvents = true;
            opensslP1.Exited += new EventHandler(opensslP1_Exited);
            opensslP1.Start();
            opensslP1.BeginOutputReadLine();

            /**
             * OpenSSL - Generate PKCS#3 Diffie-Hellman parameters
             * 
             * $ openssl dhparam -out pkcs3_www_example_com_2048bit.pem 2048
             * 
             * 
             *   Output file: pkcs3_www_example_com_1024bit.pem
             * 
             *   -----BEGIN DH PARAMETERS-----
             *   MIIBCAKCAQEAkfjs7ZsQdsa3Fa4BieuCOfQmG8l5u2COnzqW8JlDGp6wW2HEO/1h
             *   4vqMDRmBlGVdRSIZNudD/AJiMfU8lplsBBt8Ijh0GNvTxYXRFCUFMz01CDI9IMBk
             *   7uKTnoOgUJlL6V+b2PkfvFl0emRmzlioruo+jvtAuSnst9aUcTUvnAD+Oekw9Z3W
             *   p8NDZmwpGCPiNXFOmKOebJpfoi1d9tZka3jjEsJmWDhxvS0vSKd7O54wBo4qJMo2
             *   m1f7gkMwh5vWOc7X+yYe9q5R0UB+zaZi5YdtT9ajjvN+8ixaIv9rQHxSRRP/b6Y1
             *   VirBv4PJM3NVK3O3gS8aEJLIDxqyJus+twIBAg==
             *   -----END DH PARAMETERS-----
             * 
             */
            opensslP2 = new Process();

            opensslP2.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
            opensslP2.StartInfo.FileName = @"openssl.exe";
            opensslP2.StartInfo.Arguments = @"dhparam -out pkcs3_www_example_com_2048bit.pem 2048";
            opensslP2.StartInfo.RedirectStandardOutput = false;
            //opensslP2.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
            opensslP2.StartInfo.UseShellExecute = true;
            opensslP2.StartInfo.ErrorDialog = true;
            opensslP2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            opensslP2.EnableRaisingEvents = true;
            opensslP2.Exited += new EventHandler(opensslP2_Exited);
            opensslP2.Start();

            /**
             * OpenSSL - Generate PKCS#8 RSA Private Key & PKCS#10 Certificate Signing Request
             * 
             * $ openssl req -new -newkey rsa:2048 -nodes -keyout pkcs8_www_example_com_2048bit.key -out pkcs10_www_example_com_2048bit.csr -config openssl.cnf -subj "/C=US/ST=CA/L=Silicon Valley/O=XYZ Inc./OU=IT Division/CN=www.example.com/emailAddress=admin@example.com"
             *   
             *   
             *   Output file: pkcs8_www_example_com_2048bit.key
             *   
             *   -----BEGIN PRIVATE KEY-----
             *   MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC1tpg03hh/+AEz
             *   cPU9++4TGBEA5FF7wGpfMmJzcxwtLu+2vTJxKP/c1AXV5o2Hv1ePHdlPuqfTJxsh
             *   LRS95hjX3sVvsfzh+yLiy5Ta4GXadszZUamKxVNFkvVhcIPCpvsx9o+7U2Wz8oA5
             *   khH5kyf4ha9G7FA45N6ITn4U7z+2T39Y69h8PLKXkxfPwtlbsSo0B8wPFp4zXWhu
             *   LytMEdceGxfLphTTKHGDzorlCEmri6Ha+EvG9aZfT243iT2IqfHxL/+zik0U4Fvm
             *   Wfdwq/m0TneXEq9N5JyvgQlEb/+C05nAdBUbtGH/+n3nSH2RzAaudWhnWniwaT4t
             *   oTa1GjxZAgMBAAECggEACKuDtuhTUsl5RJ+1CYhtwOfmaYEf4CjpLvJRjO55TVUq
             *   C9X11oY4n5nEvKcuF7GA0sc2UBTCDLhyTJKTSWtjL+tJonQsqVIraeATyJ8gcYoS
             *   RH9VCwzpDJNEh86US/WCpN9G1w7n0Ueo+h9dj8L1L8SeRmLOOMnbUke/VCTOdnsW
             *   DbtXAIa8dpgalioQQCwN+TBuOyPzgyJrKduJXpskNBz/d33tsBwZCSVoMhVBKhux
             *   fezt4aRUFEoJXuchPEakrmhg51XRgvpk+ewsSXsaZ0OWTj/Jx7CBANlEeoWfWbBB
             *   SXKiNusgzH6b3H9LbTwqYScpdRW69KfuwvrziJKlVwKBgQDIr4/wrYWzoPjPcT9z
             *   9OOaxWvpzEshIrGSa2fFK1gUTQhPZLWSyPQOIt5JCv9vtZnZWNX0xpuvmlNmgOTn
             *   RLGZBButCpwOe4q6qd3J4SXArKFzfnKu0SsQFxiMVRyCsKBglMqWZQ8GxkXPTeAQ
             *   5YmcPW1VMmnBvqqvnPONnbbCPwKBgQDnzFN0LAVLEyns6SWdoGoBvKrp1Xj2muPe
             *   aLsfkWyFY0yU+6n5cYAigaHrzUXaZ5pGLJHHrttINVFFvAoYYsBSqizpLsxc9ECc
             *   U8++YwgJSx0Z7wQUP7J1Il8C2wClaKNo7715spa2kev/JO+RaA37D69yuPCAM1M6
             *   Fr1fWq6rZwKBgAlQrNu9EjGuTR5D4XAec9ohQ8sMYohdNeTX+28ZffMjSDl3MT5o
             *   +XsWfz7gtc6XnVaLWxMLjPpvrWNapEVf2OaDXE2B6pB5h4z2iYbvXnM9EBluSyB2
             *   MQuEJu2MndArJqaVAXpNoo7r8R2YPchK/0IzT7nepy4JDZ8tJ9jw8yS9AoGAQFuG
             *   wDaIsbN8bH6/JuinBhxwB8RxdWbD5biGW9lwnAhZ9vN42f0danc7kdDImD8zolA1
             *   mY9+6qmDCy2OT/77DviYx5VqwFRArCbJAz9Tt+DXD6BBLa4RylvkrVJI96P52uTV
             *   YrinB8G0GH8U1PZjC1XrjJq0i6O0c+hkY9k1rfkCgYACeydEq0JP6w0LsjSn8LJJ
             *   aefnYDm7OZyZkMd/TI63QYmy+W3FWCfv010X7/KEcu6WUbt9M9+Af6AyId0oRlKh
             *   IunsX2+MIQpWdUPRByT4p9DwbpsVGzJNW6lL76aqgqa6/KzAutjp9EQk6a784p3t
             *   FMW4MrX1KsU9XeGBK1mHwg==
             *   -----END PRIVATE KEY-----
             *   
             *   
             *   Output file: pkcs10_www_example_com_2048bit.csr
             *   
             *   -----BEGIN CERTIFICATE REQUEST-----
             *   MIIC3jCCAcYCAQAwgZgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEXMBUGA1UE
             *   BwwOU2lsaWNvbiBWYWxsZXkxETAPBgNVBAoMCFhZWiBJbmMuMRQwEgYDVQQLDAtJ
             *   VCBEaXZpc2lvbjEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMSAwHgYJKoZIhvcN
             *   AQkBFhFhZG1pbkBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
             *   AQoCggEBALW2mDTeGH/4ATNw9T377hMYEQDkUXvAal8yYnNzHC0u77a9MnEo/9zU
             *   BdXmjYe/V48d2U+6p9MnGyEtFL3mGNfexW+x/OH7IuLLlNrgZdp2zNlRqYrFU0WS
             *   9WFwg8Km+zH2j7tTZbPygDmSEfmTJ/iFr0bsUDjk3ohOfhTvP7ZPf1jr2Hw8speT
             *   F8/C2VuxKjQHzA8WnjNdaG4vK0wR1x4bF8umFNMocYPOiuUISauLodr4S8b1pl9P
             *   bjeJPYip8fEv/7OKTRTgW+ZZ93Cr+bROd5cSr03knK+BCURv/4LTmcB0FRu0Yf/6
             *   fedIfZHMBq51aGdaeLBpPi2hNrUaPFkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IB
             *   AQAUi+ebC2X2ytPHg9HjrkQYKvxsXdCbia0CmPf0InxUPwlDRIyyqXD23Mp5WEHo
             *   obHlLkx22wuxqg3UfHzt41q/Ohq+6Vbn8NlGfpPLGtMr5Usy/qLk27O3wuw4syVE
             *   X1n9Cc17SlsaiPgowTcFYCgCwRmYACVidYsOUb+5KnIGb6W9xoqPOHOtBc8CWng7
             *   owocix2V5LvNBdg/67lg1loJX4jCb90972l13sjmWmnLiWBUAqvlzXOgkIT+KPJH
             *   znTR80yhMyz1U9ZK2su2s9SJ8nL+VlgAv4lgCoOqX9GeYVJGXXadgsrdMZy6O0gz
             *   +zUu5OvBRIi28pwqCZvrGOun
             *   -----END CERTIFICATE REQUEST-----
             * 
             */
            opensslP3 = new Process();

            opensslP3.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
            opensslP3.StartInfo.FileName = @"openssl.exe";
            opensslP3.StartInfo.Arguments = @"req -new -newkey rsa:2048 -nodes -keyout pkcs8_www_example_com_2048bit.key -out pkcs10_www_example_com_2048bit.csr -config openssl.cnf -subj ""/C=US/ST=CA/L=Silicon Valley/O=XYZ Inc./OU=IT Division/CN=www.example.com/emailAddress=admin@example.com""";
            opensslP3.StartInfo.RedirectStandardOutput = false;
            //opensslP3.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
            opensslP3.StartInfo.UseShellExecute = true;
            opensslP3.StartInfo.ErrorDialog = true;
            opensslP3.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            opensslP3.EnableRaisingEvents = true;
            opensslP3.Exited += new EventHandler(opensslP3_Exited);
            opensslP3.Start();

        }

        static void opensslP1_Exited(object sender, EventArgs e)
        {
            Console.WriteLine($"Shown   : version info");
        }

        static void opensslP2_Exited(object sender, EventArgs e)
        {
            Console.WriteLine($"Exported: pkcs3_www_example_com_2048bit.pem");
        }

        static void opensslP3_Exited(object sender, EventArgs e)
        {
            Console.WriteLine($"Exported: pkcs8_www_example_com_2048bit.key");
            Console.WriteLine($"Exported: pkcs10_www_example_com_2048bit.csr");
        }
    }
}

【问题讨论】:

  • 嗯,它是an extension method,所以把它放在任何静态类中。
  • 这不能不上课吗?我需要它的最短、最简单的版本。
  • 这是 C#,你总是需要一个类。但是你可以把Program设为静态,然后把它放在那里。

标签: c# process


【解决方案1】:

利用 C# async/await 任务,我能够在 .NET Core 6.0 中创建以下示例:

using System.Diagnostics;

namespace asynchronousCode
{
    class Program
    {
        public async static Task Main(string[] args)
        {
            Console.WriteLine("Initializing Main program..." + Environment.NewLine);

            // Start the task1Async operation asynchronously
            Task<bool> task1Async = Task1Async();

            // Await task1Async operation completed = process Exit.Code(0)
            bool output1 = await task1Async;
            Console.WriteLine("Task1Async Success:" + output1 + Environment.NewLine);

            // Run the task2Async operation asynchronously
            Task<bool> task2Async = Task2Async();

            // Await task2Async operation completed = process Exit.Code(0)
            bool output2 = await task2Async;
            Console.WriteLine("Task2Async Success:" + output2 + Environment.NewLine);

            // Run the task3Async operation asynchronously
            Task<bool> task3Async = Task3Async();

            // Await task3Async operation completed = process Exit.Code(0)
            bool output3 = await task3Async;
            Console.WriteLine("Task3Async Success:" + output3 + Environment.NewLine);

            Console.WriteLine("End Main Program");
        }

        // Returns a boolean
        public static async Task<bool> Task1Async()
        {
            Console.WriteLine("Inside Task1Async method");

            var taskComplete = false;

            /**
             * OpenSSL - Show version info
             * 
             * $ openssl version
             * 
             *   Output text: OpenSSL 3.1.0-dev  (Library: OpenSSL 3.1.0-dev )
             * 
             */
            using (Process openssl = new Process())
            {
                openssl.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
                openssl.StartInfo.FileName = @"openssl.exe";
                openssl.StartInfo.Arguments = @"version";
                openssl.StartInfo.RedirectStandardOutput = true;
                openssl.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
                openssl.StartInfo.UseShellExecute = false;
                openssl.StartInfo.ErrorDialog = true;
                //openssl.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                openssl.EnableRaisingEvents = true;
                openssl.Exited += (sender, args) => taskComplete = true;
                openssl.Start();
                openssl.BeginOutputReadLine();

                await openssl.WaitForExitAsync();
            }

            Console.WriteLine("Returning from Task1Async method");

            return taskComplete;
        }

        // Returns a boolean
        public static async Task<bool> Task2Async()
        {
            Console.WriteLine("Inside Task2Async method");

            var taskComplete = false;

            /**
             * OpenSSL - Generate PKCS#3 Diffie-Hellman parameters
             * 
             * $ openssl dhparam -out pkcs3_www_example_com_2048bit.pem 2048
             * 
             * 
             *   Output file: pkcs3_www_example_com_1024bit.pem
             * 
             *   -----BEGIN DH PARAMETERS-----
             *   MIIBCAKCAQEAkfjs7ZsQdsa3Fa4BieuCOfQmG8l5u2COnzqW8JlDGp6wW2HEO/1h
             *   4vqMDRmBlGVdRSIZNudD/AJiMfU8lplsBBt8Ijh0GNvTxYXRFCUFMz01CDI9IMBk
             *   7uKTnoOgUJlL6V+b2PkfvFl0emRmzlioruo+jvtAuSnst9aUcTUvnAD+Oekw9Z3W
             *   p8NDZmwpGCPiNXFOmKOebJpfoi1d9tZka3jjEsJmWDhxvS0vSKd7O54wBo4qJMo2
             *   m1f7gkMwh5vWOc7X+yYe9q5R0UB+zaZi5YdtT9ajjvN+8ixaIv9rQHxSRRP/b6Y1
             *   VirBv4PJM3NVK3O3gS8aEJLIDxqyJus+twIBAg==
             *   -----END DH PARAMETERS-----
             * 
             */
            using (Process openssl = new Process())
            {
                openssl.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
                openssl.StartInfo.FileName = @"openssl.exe";
                openssl.StartInfo.Arguments = @"dhparam -out pkcs3_www_example_com_2048bit.pem 2048";
                openssl.StartInfo.RedirectStandardOutput = false;
                //openssl.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
                openssl.StartInfo.UseShellExecute = true;
                openssl.StartInfo.ErrorDialog = true;
                openssl.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                openssl.EnableRaisingEvents = true;
                openssl.Exited += (sender, args) => taskComplete = true;
                openssl.Start();

                await openssl.WaitForExitAsync();
            }

            Console.WriteLine("Returning from Task2Async method");

            return taskComplete;
        }

        // Returns a boolean
        public static async Task<bool> Task3Async()
        {
            Console.WriteLine("Inside Task3Async method");

            var taskComplete = false;

            /**
             * OpenSSL - Generate PKCS#8 RSA Private Key & PKCS#10 Certificate Signing Request
             * 
             * $ openssl req -new -newkey rsa:2048 -nodes -keyout pkcs8_www_example_com_2048bit.key -out pkcs10_www_example_com_2048bit.csr -config openssl.cnf -subj "/C=US/ST=CA/L=Silicon Valley/O=XYZ Inc./OU=IT Division/CN=www.example.com/emailAddress=admin@example.com"
             *   
             *   
             *   Output file: pkcs8_www_example_com_2048bit.key
             *   
             *   -----BEGIN PRIVATE KEY-----
             *   MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC1tpg03hh/+AEz
             *   cPU9++4TGBEA5FF7wGpfMmJzcxwtLu+2vTJxKP/c1AXV5o2Hv1ePHdlPuqfTJxsh
             *   LRS95hjX3sVvsfzh+yLiy5Ta4GXadszZUamKxVNFkvVhcIPCpvsx9o+7U2Wz8oA5
             *   khH5kyf4ha9G7FA45N6ITn4U7z+2T39Y69h8PLKXkxfPwtlbsSo0B8wPFp4zXWhu
             *   LytMEdceGxfLphTTKHGDzorlCEmri6Ha+EvG9aZfT243iT2IqfHxL/+zik0U4Fvm
             *   Wfdwq/m0TneXEq9N5JyvgQlEb/+C05nAdBUbtGH/+n3nSH2RzAaudWhnWniwaT4t
             *   oTa1GjxZAgMBAAECggEACKuDtuhTUsl5RJ+1CYhtwOfmaYEf4CjpLvJRjO55TVUq
             *   C9X11oY4n5nEvKcuF7GA0sc2UBTCDLhyTJKTSWtjL+tJonQsqVIraeATyJ8gcYoS
             *   RH9VCwzpDJNEh86US/WCpN9G1w7n0Ueo+h9dj8L1L8SeRmLOOMnbUke/VCTOdnsW
             *   DbtXAIa8dpgalioQQCwN+TBuOyPzgyJrKduJXpskNBz/d33tsBwZCSVoMhVBKhux
             *   fezt4aRUFEoJXuchPEakrmhg51XRgvpk+ewsSXsaZ0OWTj/Jx7CBANlEeoWfWbBB
             *   SXKiNusgzH6b3H9LbTwqYScpdRW69KfuwvrziJKlVwKBgQDIr4/wrYWzoPjPcT9z
             *   9OOaxWvpzEshIrGSa2fFK1gUTQhPZLWSyPQOIt5JCv9vtZnZWNX0xpuvmlNmgOTn
             *   RLGZBButCpwOe4q6qd3J4SXArKFzfnKu0SsQFxiMVRyCsKBglMqWZQ8GxkXPTeAQ
             *   5YmcPW1VMmnBvqqvnPONnbbCPwKBgQDnzFN0LAVLEyns6SWdoGoBvKrp1Xj2muPe
             *   aLsfkWyFY0yU+6n5cYAigaHrzUXaZ5pGLJHHrttINVFFvAoYYsBSqizpLsxc9ECc
             *   U8++YwgJSx0Z7wQUP7J1Il8C2wClaKNo7715spa2kev/JO+RaA37D69yuPCAM1M6
             *   Fr1fWq6rZwKBgAlQrNu9EjGuTR5D4XAec9ohQ8sMYohdNeTX+28ZffMjSDl3MT5o
             *   +XsWfz7gtc6XnVaLWxMLjPpvrWNapEVf2OaDXE2B6pB5h4z2iYbvXnM9EBluSyB2
             *   MQuEJu2MndArJqaVAXpNoo7r8R2YPchK/0IzT7nepy4JDZ8tJ9jw8yS9AoGAQFuG
             *   wDaIsbN8bH6/JuinBhxwB8RxdWbD5biGW9lwnAhZ9vN42f0danc7kdDImD8zolA1
             *   mY9+6qmDCy2OT/77DviYx5VqwFRArCbJAz9Tt+DXD6BBLa4RylvkrVJI96P52uTV
             *   YrinB8G0GH8U1PZjC1XrjJq0i6O0c+hkY9k1rfkCgYACeydEq0JP6w0LsjSn8LJJ
             *   aefnYDm7OZyZkMd/TI63QYmy+W3FWCfv010X7/KEcu6WUbt9M9+Af6AyId0oRlKh
             *   IunsX2+MIQpWdUPRByT4p9DwbpsVGzJNW6lL76aqgqa6/KzAutjp9EQk6a784p3t
             *   FMW4MrX1KsU9XeGBK1mHwg==
             *   -----END PRIVATE KEY-----
             *   
             *   
             *   Output file: pkcs10_www_example_com_2048bit.csr
             *   
             *   -----BEGIN CERTIFICATE REQUEST-----
             *   MIIC3jCCAcYCAQAwgZgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEXMBUGA1UE
             *   BwwOU2lsaWNvbiBWYWxsZXkxETAPBgNVBAoMCFhZWiBJbmMuMRQwEgYDVQQLDAtJ
             *   VCBEaXZpc2lvbjEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMSAwHgYJKoZIhvcN
             *   AQkBFhFhZG1pbkBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
             *   AQoCggEBALW2mDTeGH/4ATNw9T377hMYEQDkUXvAal8yYnNzHC0u77a9MnEo/9zU
             *   BdXmjYe/V48d2U+6p9MnGyEtFL3mGNfexW+x/OH7IuLLlNrgZdp2zNlRqYrFU0WS
             *   9WFwg8Km+zH2j7tTZbPygDmSEfmTJ/iFr0bsUDjk3ohOfhTvP7ZPf1jr2Hw8speT
             *   F8/C2VuxKjQHzA8WnjNdaG4vK0wR1x4bF8umFNMocYPOiuUISauLodr4S8b1pl9P
             *   bjeJPYip8fEv/7OKTRTgW+ZZ93Cr+bROd5cSr03knK+BCURv/4LTmcB0FRu0Yf/6
             *   fedIfZHMBq51aGdaeLBpPi2hNrUaPFkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IB
             *   AQAUi+ebC2X2ytPHg9HjrkQYKvxsXdCbia0CmPf0InxUPwlDRIyyqXD23Mp5WEHo
             *   obHlLkx22wuxqg3UfHzt41q/Ohq+6Vbn8NlGfpPLGtMr5Usy/qLk27O3wuw4syVE
             *   X1n9Cc17SlsaiPgowTcFYCgCwRmYACVidYsOUb+5KnIGb6W9xoqPOHOtBc8CWng7
             *   owocix2V5LvNBdg/67lg1loJX4jCb90972l13sjmWmnLiWBUAqvlzXOgkIT+KPJH
             *   znTR80yhMyz1U9ZK2su2s9SJ8nL+VlgAv4lgCoOqX9GeYVJGXXadgsrdMZy6O0gz
             *   +zUu5OvBRIi28pwqCZvrGOun
             *   -----END CERTIFICATE REQUEST-----
             * 
             */
            using (Process openssl = new Process())
            {
                openssl.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
                openssl.StartInfo.FileName = @"openssl.exe";
                openssl.StartInfo.Arguments = @"req -new -newkey rsa:2048 -nodes -keyout pkcs8_www_example_com_2048bit.key -out pkcs10_www_example_com_2048bit.csr -config openssl.cnf -subj ""/C=US/ST=CA/L=Silicon Valley/O=XYZ Inc./OU=IT Division/CN=www.example.com/emailAddress=admin@example.com""";
                openssl.StartInfo.RedirectStandardOutput = false;
                //openssl.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
                openssl.StartInfo.UseShellExecute = true;
                openssl.StartInfo.ErrorDialog = true;
                openssl.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                openssl.EnableRaisingEvents = true;
                openssl.Exited += (sender, args) => taskComplete = true;
                openssl.Start();

                await openssl.WaitForExitAsync();
            }

            Console.WriteLine("Returning from Task3Async method");

            return taskComplete;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2018-10-04
    • 2018-07-03
    • 2011-10-07
    • 2013-02-02
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多