Может ли агент веб-развертывания работать на порте, отличном от 80, на IIS6? - PullRequest
28 голосов
/ 03 мая 2011

У меня есть небольшая проблема с машиной Windows 2003, где мне нужно запустить агент веб-развертывания на порте, который не равен 80. По умолчанию MsDepSvc предоставит конечную точку на http://[server]/MsDeployAgentService, которая явно неявно прослушивает порт 80.

Проблема, с которой я столкнулся, состоит в том, что на машине также запущен Visual SVN Server, который использует порт 80, и в результате служба агента веб-развертывания отказывается запускаться. (По крайней мере, это единственный логический вывод, который я могу сделать.) У меня есть небольшое приложение для управления SVN на той же машине, которое я хотел бы опубликовать через веб-развертывание, поэтому загадка.

Можно ли запустить агент на другом порту? Очевидно, что если бы это был IIS7, мы были бы на 8172, и все было бы хорошо, но, к сожалению, это не так. Есть предложения?

Ответы [ 4 ]

62 голосов
/ 16 мая 2011

Есть несколько способов сделать это:

Вариант 1: удаление и повторная установка Указание другого порта:

msiexec /I WebDeploy_x86_en-US.msi /passive ADDLOCAL=ALL LISTENURL=http://+:8172/MsDeployAgentService

Командная строка устанавливает MsDeployAgentService и настраивает его на прослушивание через порт 8172, как и в IIS7.

Вариант 2: перенастроить существующую службу для прослушивания через порт 8172:

  1. Остановите msdepsvc (net stop msdepsvc)

  2. Измените следующее значение реестра:

    HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters\ListenUrl
    

    Это будет выглядеть примерно так:

    http://+:80/MsDeployAgentService
    

    Изменить на:

    http://+:8172/MsDeployAgentService
    
  3. Запрос прослушивателей HTTP:

    httpcfg query urlacl
    

    В результатах должна появиться следующая запись:

    URL : http://+:80/MsDeployAgentService/
    ACL : D:(A;;GX;;;NS)
    
  4. Изменить слушателя:

    httpcfg delete urlacl /u http://+:80/MsDeployAgentService/
    

    Это должно ответить: HttpDeleteServiceConfiguration completed with 0.

    httpcfg set urlacl /u http://+:8172/MsDeployAgentService/ /a D:(A;;GX;;;NS)
    

    Это должно ответить: HttpSetServiceConfiguration completed with 0.

    ACL, указанный в переключателе /a, должен соответствовать ACL, сообщенному командой httpcfg query urlacl

  5. Перезапустите msdepsvc (net start msdepsvc).

  6. Вы можете подтвердить, что служба прослушивает порт 8172, выполнив:

    netstat -an
    

    Вы должны увидеть следующее:

    TCP    0.0.0.0:8172           0.0.0.0:0              LISTENING
    

Внимание:

Я бы попробовал это на непроизводственной машине, чтобы убедиться, что она работает так, как вы ожидаете.

26 голосов
/ 04 октября 2012

Это изменения, которые я должен был сделать для Windows 7, следуя рецепту Кева:

Шаг 3: netsh http show urlacl

Шаг 4: netsh http delete urlacl url=http://+:80/MSDEPLOYAGENTSERVICE/

netsh http add urlacl url=http://+:8172/MSDEPLOYAGENTSERVICE/ sddl=D:(A;;GX;;;NS)

7 голосов
/ 01 марта 2013

Что бы это ни стоило, я склеил твердый совет Кева в пакетный скрипт для одной остановки при смене номера порта.

:: Name:     MsDepSvc.Port.cmd
:: Purpose:  Modifies the TCP/IP port that the Web Deployment Agent Service
::           (MsDepSvc) listens on.  Tested on Win7 Enterprise 32-bit.
:: Author:   stevejansen_github@icloud.com
:: Revision: January 2013

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

:: variables
SET me=%~n0
SET url=
SET port=
IF NOT "%~1"=="" (
  SET /A port=%~1
)

ECHO %me%: Web Deployment Agent Service (MsDepSvc) port change script

:: default argument values
IF "%port%"=="" (
  SET /A port=8172
  ECHO %me%: INFO - using default port value of 8172
)

SC.EXE query msdepsvc >NUL 2>NUL
IF NOT "%ERRORLEVEL%"=="0" (
  ECHO %me%: ERROR - MsDepSvc not installed
  ECHO %me%: exiting
  EXIT /B 1
)

ECHO %me%: stopping MsDepSvc
NET STOP msdepsvc >NUL 2>NUL

:: check if the default port is set
REG.EXE QUERY HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /v ListenUrl >NUL
IF NOT "%ERRORLEVEL%"=="0" (
  ECHO %me%: ERROR - MsDepSvc ListenUrl registry key not found
  REG.EXE QUERY HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters
  ECHO %me%: exiting
  EXIT /B 2
)

FOR /F "tokens=3" %%I IN ('REG.EXE QUERY HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /v ListenUrl ^| FINDSTR ListenUrl') DO (
  SET url=%%I
)
ECHO %me%: INFO - MsDepSvc current reservation is "%url%"

NETSH.EXE http show urlacl "%url%" >NUL
IF NOT "%ERRORLEVEL%"=="0" (
  ECHO %me%: ERROR - reservation for "%url%" not found
  EXIT /B 4
)

:: save the existing urlacl properties for User, Listen, Delegate, and SDDL
FOR /F "tokens=1,* delims=: " %%A IN ('NETSH.exe http show urlacl %url%  ^| FINDSTR "User Listen Delegate SDDL"') DO (
  SET URLACL.%%A=%%B
)

IF NOT DEFINED URLACL.User     ECHO %me%: Failed to read the exising URLACL setting for User     &&GOTO :ERROR
IF NOT DEFINED URLACL.Listen   ECHO %me%: Failed to read the exising URLACL setting for Listen   &&GOTO :ERROR
IF NOT DEFINED URLACL.Delegate ECHO %me%: Failed to read the exising URLACL setting for Delegate &&GOTO :ERROR
IF NOT DEFINED URLACL.SDDL     ECHO %me%: Failed to read the exising URLACL setting for SDDL     &&GOTO :ERROR

ECHO %me%: updating MsDepSvc to listen on port %port%
REG.EXE ADD HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /v ListenUrl /t REG_SZ /f /d "http://+:%port%/MSDEPLOYAGENTSERVICE/"

ECHO %me%: deleting the existing reservation for MsDepSvc
NETSH.EXE http delete urlacl "%url%" || GOTO :ERROR

ECHO %me%: adding the port %port% reservation for MsDepSvc
NETSH.EXE http add urlacl url=http://+:%port%/MsDeployAgentService/ user="%URLACL.User%" listen="%URLACL.Listen%" delegate="%URLACL.Delegate%" SDDL="%URLACL.SDDL%"  || GOTO :ERROR

ECHO %me%: starting MsDepSvc
NET START msdepsvc >NUL 2>NUL

ECHO %me%: process info for MsDepSvc
QUERY.EXE PROCESS MSDEPSVC.EXE
ECHO.
ECHO %me%: port bindings for MsDepSvc
NETSTAT.EXE -a -n -o | FINDSTR /R "TCP.*:%port%.*LISTENING Proto"
ECHO.
ECHO %me%: finished

:END
ENDLOCAL
ECHO ON
@EXIT /B 0

:ERROR
ECHO %me%: ERROR - exiting with errorlevel %ERRORLEVEL%
ECHO ON
@EXIT/B %ERRORLEVEL%

Подробнее:

0 голосов
/ 08 ноября 2016

Также стоит знать магию, чтобы выяснить, какое свойство хранится в каком ключе реестра - введите Orca.exe - бесценный и простой в использовании инструмент для чтения / изменения базы данных MSI (старайтесь не изменять хотя).

Сначала нам нужно найти свойство в таблице свойств. enter image description here

Как только свойство будет найдено, перейдите к таблице реестра и найдите, куда оно вставлено. enter image description here

...