Может ли агент развертывания сети работать на порту, отличном от 80 на IIS6?
У меня есть проблема с машиной Windows 2003, где мне нужно запустить агент веб-развертывания на порте, который не равен 80. По умолчанию MsDepSvc будет выставлять конечную точку на http://[server ]/MsDeployAgentService, который явно неявно прослушивает порт 80.
Проблема заключается в том, что на компьютере также запущен Visual SVN Server, который использует порт 80, и, как следствие, служба агента веб-развертывания отказывается запускать. (По крайней мере, это единственный логический вывод, который я могу сделать.) У меня есть небольшое приложение управления SVN на той же машине, которую я бы хотел опубликовать через веб-развертывание, и, следовательно, головоломку.
Возможно ли запустить агент на другом порту? Очевидно, что если бы это был IIS7, мы были бы на 8172, и все было бы хорошо, но, к сожалению, это не так. Любые предложения?
Ответы
Ответ 1
Есть несколько способов сделать это:
Вариант 1: Удаление и переустановка Указание другого порта:
msiexec /I WebDeploy_x86_en-US.msi /passive ADDLOCAL=ALL LISTENURL=http://+:8172/MsDeployAgentService
Командная строка устанавливает MsDeployAgentService и настраивает ее для прослушивания на порту 8172, как на IIS7.
Вариант 2. Повторная настройка существующей службы для прослушивания на порту 8172:
-
Остановить msdepsvc (net stop msdepsvc
)
-
Отредактируйте следующее значение реестра:
HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters\ListenUrl
Он будет выглядеть примерно так:
http://+:80/MsDeployAgentService
Изменить на:
http://+:8172/MsDeployAgentService
-
Запросить HTTP-прослушиватели:
httpcfg query urlacl
В результатах поиска должна отображаться следующая запись:
URL : http://+:80/MsDeployAgentService/
ACL : D:(A;;GX;;;NS)
-
Изменить слушателя:
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
-
Перезапустите msdepsvc (net start msdepsvc
).
-
Вы можете подтвердить, что служба прослушивает порт 8172, выполнив:
netstat -an
Вы должны увидеть следующее:
TCP 0.0.0.0:8172 0.0.0.0:0 LISTENING
Внимание:
Я бы попробовал это на непроизводственной машине, чтобы убедиться, что это работает так, как вы ожидаете.
Ответ 2
Это изменения, которые я должен был сделать для Windows 7, следуя рецепту Kev:
Шаг 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)
Ответ 3
Для чего это стоило, я склеил целые советы Kev в пакетный script для покупки одной остановки при изменении номеров портов.
:: 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: [email protected]
:: 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%
Подробнее:
Ответ 4
Также стоит знать волшебство за тем, как узнать, какое свойство хранится в каком ключе реестра - введите Orca.exe - бесценный и простой использовать инструмент для чтения/изменения базы данных MSI (попробуйте не изменять).
Сначала нам нужно найти свойство в таблице свойств
![введите описание изображения здесь]()
Как только свойство найдено, перейдите в таблицу реестра и найдите, где он вставлен.
![введите описание изображения здесь]()