2017-10-03 18 views
0

System.Processで引数を渡してnetshコマンドを実行しようとしていますが、「パラメータが正しくありません」というメッセージが表示されます。戻る。無効な文字がProcess.StandardInput.WriteLineで渡されました

通知パラメータである:

HTTP追加のsslcert ipport = 0.0.0.0:{ポート} CERTHASH = {certificateHash} APPID = '{{00000000-0000-0000-0000-AABBCCDDEEFF}} ';

ここで、portは選択されたポートであり、certificateHashは指定された証明書のハッシュです。

は、私は、コマンドのリターンが追加隠し文字を持っていることに気づい (??)この例のようにパラメータCERTHASHため

C:\ WINDOWS \ SYSTEM32> netshのHTTPのsslcert ipport追加= 0.0.0.0:8787 certhash = ?? BDBCA9543D50108B6F43AA44852CD1D0F4C07B7C appid = '{00000000-0000-0000-0000-AABBCCDDEEFF}' パラメータが正しくありません。

引数の文字列を私が渡しているものと厳密に一致させる方法はありますか?私はいくつかの改造を見逃していますか?

public static void RegisterCertificateToSslPort(string subjectName) 
{ 
     var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
     store.Open(OpenFlags.ReadOnly); 

     var certificate = store.Certificates.Find(X509FindType.FindBySubjectName, subjectName, true); 

     var certificateHash = CleanThumbprint(certificate[0]?.GetCertHashString()); 

     var result = CommandExecuter.AddSslCertificateToPort(certificateHash, "8787"); 
} 


public static string CleanThumbprint(string mmcThumbprint) 
{ 
     return new string(mmcThumbprint.Where(c => char.IsLetter(c) || char.IsDigit(c)).ToArray()); 
} 

private static string Execute(string command) 
{ 
     var startInfo = 
      new System.Diagnostics.ProcessStartInfo 
      { 
       WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden, 
       FileName = "cmd.exe", 
       Verb = "runas", 
       UseShellExecute = false, 
       RedirectStandardInput = true, 
       RedirectStandardOutput = true, 
       WorkingDirectory = @"C:\Windows\system32" 
      }; 

     var standardOutput = new StringBuilder(); 

     using (var process = System.Diagnostics.Process.Start(startInfo)) 
     { 
      using (var sw = process?.StandardInput) 
      { 
       if (sw != null && sw.BaseStream.CanWrite) 
       { 
        sw.WriteLine(command); 
       } 
      } 

      while (process != null && !process.HasExited) 
      { 
       standardOutput.Append(process.StandardOutput.ReadToEnd()); 
      } 

      standardOutput.Append(process?.StandardOutput.ReadToEnd()); 
     } 

     return standardOutput.ToString(); 
} 

public static string AddSslCertificateToPort(string certificateHash, string port, string appId = null) 
{ 
     var command = 
      $"netsh http add sslcert ipport=0.0.0.0:{port} certhash=‎‎{certificateHash} appid='{{00000000-0000-0000-0000-AABBCCDDEEFF}}'"; 

     return Execute(command); 
} 

答えて

0

をので、いつか私の頭を破った後、私は再び私の文字列をチェックしてみました:ここ

は、私が使用しているコードです。何が起こったのか、最初は、私は必要な変更をメモ帳に貼り付けコマンドを++としなかったということであった:

netshのHTTPの追加をのsslcert ipport = 0.0.0.0:{ポート} CERTHASH = {} certificateHash APPID = '{ {00000000-0000-0000-0000-AABBCCDDEEFF}}

それはCERTHASH =の終わりに2つの隠し文字を追加するいくつかの奇妙な理由のため、それらは抽出するために、私の方法で洗浄か、見つかりませんでした文字列と数字だけです。

通常のメモ帳と[Unicode文字を表示]オプションを使用した後、隠し文字が表示されました。離れて、私はちょうど正しい文字列を貼り付けて、コードをうまく実行することができました。

関連する問題