System.Process에서 인수를 전달하여 netsh 명령을 실행하려고하는데 "매개 변수가 잘못되었습니다." 반환.잘못된 문자가 Process.StandardInput.WriteLine과 함께 전달되었습니다.
통보 매개 변수는 다음과 같습니다
HTTP 추가 sslcert의 ipport = 0.0.0.0 : {포트} certhash = {certificateHash} APPID = '{{00000000-0000-0000-0000-AABBCCDDEEFF}} ';
여기서 port는 선택된 포트이며 certificate는 지정된 인증서의 해시를 해시합니다.
나는 명령의 반환 추가 숨겨진 문자가 실현 (?)이 예제와 매개 변수 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);
}