Как установить прокси-сервер http в подоболочке, запущенной из службы Windows - PullRequest
1 голос
/ 09 июля 2009

Я пишу службу Windows, которая берет загруженный файл, запускает на нем signtool.exe для подписи и отметки времени, а затем возвращает подписанный файл обратно.

Код для этого работает при запуске в качестве автономного сервера с использованием витой, однако, если я пытаюсь запустить его в качестве службы, произойдет сбой с ошибкой «Подписывание выполнено успешно, но при попытке установить метку времени произошла ошибка».

Если я заменю вызов подпроцесса signcode вызовом curl.exe, который явно использует прокси-сервер, то это завершится успешно.

Я установил прокси в Internet Explorer, и запуск команды выполняется вручную. Есть ли другой способ установить http-прокси для signtool / signcode или другой способ сделать это (я стремлюсь, чтобы это был сервис для простоты интеграции в некоторые другие системы мониторинга)?

Ответы [ 2 ]

1 голос
/ 02 августа 2009

Службы вдов странны тем, что они работают в отдельном сеансе winlogon с ограниченными учетными данными. Можете ли вы сообщить мне следующее, чтобы попытаться помочь отладить это ...

  1. Под какими учетными данными вы запускаете службу (NetworkService?)
  2. Что выводит "proxycfg" или "netsh winhttp show proxy" (в зависимости от версии Windows). Эти инструменты командной строки сообщат вам, какой прокси установлен для программ оболочки.
0 голосов
/ 07 сентября 2015

У меня та же проблема, но я запускаю signtool через cygwin ssh (используя пароль). Временная метка работает только через прокси и через ssh, если я хотя бы один раз захожу в систему через графический интерфейс (например, через rdesktop). После этого мне даже не нужно заходить в графический интерфейс, чтобы он работал через ssh, я просто должен убедиться, что я хотя бы один раз вошел в систему через графический интерфейс. Что бы он ни делал при графическом входе в систему, он тоже переживает перезагрузку. Однако одно отличие состоит в том, что я устанавливаю параметры прокси динамически, используя тот же PowerShell, который запускаю через ssh:

$reg_key = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Set-ItemProperty -path $reg_key ProxyServer -value 192.168.0.3:8888
Set-ItemProperty -path $reg_key ProxyOverride -value "<local>"
Set-ItemProperty -path $reg_key ProxyEnable -value 1

Я попытался запустить explorer.exe &, notepad & и iexplorer.exe & из ssh, но это не помогло. Я посмотрю о жестком кодировании настроек прокси-сервера, а также о возможности входа подписывающего пользователя в графический интерфейс после загрузки. Также проверит, чтобы убедиться, что ssh запущен с cygrunsrv -i или что ему разрешено взаимодействовать с рабочим столом, проверено в сервисах.

Система переворачивает свой образ, если он остановлен (vmware delta image) (так я могу продублировать проблему), но я всегда могу изменить его, что, похоже, мне придется сделать, чтобы решить эту проблему .

Наконец-то разобрался с некоторой помощью из комментария здесь:

http://blogs.msdn.com/b/askie/archive/2013/05/09/user-proxy-settings-showing-up-in-local-system-account-correct-way-to-apply-proxy-settings.aspx#10606266

Похоже, что настройка фактически должна быть установлена ​​в двоичном файле:

HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\DefaultConnectionSettings

Этот двоичный файл не создается в реестре до графического входа в систему даже с настройками PowerShell, которые я сделал выше. Самый простой способ - войти в систему (при условии, что у вас есть настройки реестра, которые я сделал с помощью powershell выше, или установить их вручную через пользовательский интерфейс параметров Интернета в графическом интерфейсе), экспортировать файл HKEY_Current_User \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Connections, и импортировать его с помощью:

regedit /s path_to_proxy_settings.reg

Если вы хотите, чтобы он применялся ко всем пользователям, вам нужно применить один и тот же файл в:

HKEY_LOCAL_MACHINE\\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections

как упомянуто в посте. Могут быть и другие способы, как упомянуто здесь https://serverfault.com/questions/34940/how-do-i-configure-proxy-settings-for-local-system, но вышеизложенное было для меня самым простым.

...