Мы столкнулись с проблемой отдельного вызова netsh в двух разных средах.
Во время процесса установки нам необходимо привязать ssl-сертификат к определенному порту.Этот процесс установки (расширенный установщик на основе setup.exe) можно выполнить вручную, но обычно он выполняется в режиме без вывода сообщений.Сертификат создается и хранится на локальном компьютере.После этого мы пытаемся связать указанный сертификат с помощью:
http add sslcert ipport=0.0.0.0:9001 certhash=B83C66C9C04F88680D3359E394F4ADA160AAA51B appid={02639b71-0935-35e8-9d1b-9dd1a2a34627} clientcertnegotiation=enable
. Настройка запускает специальную функцию для этого (powershell):
Param([String]$appDir="")
Import-Module PKI
dir Cert:\LocalMachine\My
cd $appdir
.\Services\Crypto\OurCompany.Crypto.Installer.exe install silent
dir Cert:\LocalMachine\My
, которая в свою очередь выполняет файл installer.exe.Реализация этого файла ( значительно упрощена ):
static void Main(string[] args)
{
ProcessStartInfo procInfo = new ProcessStartInfo()
{
WindowStyle = ProcessWindowStyle.Normal,
FileName = "netsh.exe",
Arguments = "http add sslcert ipport=0.0.0.0:9001 certhash=B83C66C9C04F88680D3359E394F4ADA160AAA51B appid={02639b71-0935-35e8-9d1b-9dd1a2a34627} clientcertnegotiation=enable",
UseShellExecute = false,
Verb = "runas",
};
var process = new Process();
process.StartInfo = procInfo;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
process.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
Чтобы обратиться к слону в комнате: логика в installer.exe используется в нескольких местах несколькими приложениями,Именно поэтому мы решили просто запустить .exe из Power Shell.У нас есть больше процедур, запускаемых таким же образом (вставка сертификата, резервирование URL-адреса, ...)
Выполнение вышеупомянутой команды netsh в административной консоли завершается успешно, так же как и запуск installer.exe прямо изфайловая система с повышенными правами (щелчок правой кнопкой мыши, запуск от имени администратора).
При ручном запуске setup.exe с повышенными правами также выполняется команда, и OutputDataReceived-делегат подтверждает:
Das SSL-Zertifikat wurde erfolgreich hinzugefügt.
(при запуске на немецкой ОС)
Но на самом деле сертификат не был привязан к порту !За исключением сообщения об успехе, дополнительные журналы не создавались (такие как msi-журналы, журналы событий, ...).
Любой совет приветствуется.