Различное поведение вызова "netsh" через консоль и расширенный установщик - PullRequest
0 голосов
/ 06 декабря 2018

Мы столкнулись с проблемой отдельного вызова 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-журналы, журналы событий, ...).

Любой совет приветствуется.

...