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);
}