30

我在使用 Windows 2003 机器时遇到了一些挑战,我需要在不是 80 的端口上运行 Web 部署代理。默认情况下,MsDepSvc 将在 http://[server]/MsDeployAgentService 公开一个端点它显然隐式地监听端口 80。

我遇到的问题是机器也在运行 Visual SVN Server,它使用端口 80,因此 Web 部署代理服务拒绝启动。(至少这是我能得出的唯一合乎逻辑的结论。)我在同一台机器上有一个小型 SVN 管理应用程序,我想通过 Web 部署发布它,因此这是个难题。

是否可以在另一个端口上运行代理?显然,如果这是 IIS7,我们将使用 8172,一切都会好起来的,但不幸的是,这里并非如此。有什么建议么?

4

4 回答 4

63

有几种方法可以做到这一点:

选项 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
    

警告:

我会先在非生产机器上尝试这个,以确保它按您的预期工作。

于 2011-05-16T10:19:23.703 回答
27

这些是我必须按照 Kev 的食谱为 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)

于 2012-10-04T13:32:38.797 回答
9

对于它的价值,我将 Kev 的可靠建议整合到一个批处理脚本中,用于一站式购买更改端口号。

:: 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%

阅读更多:

于 2013-02-28T22:33:20.770 回答
0

还值得了解找出哪些属性存储在哪个注册表项中的魔力 - 输入Orca.exe - 用于读取/修改 MSI 数据库的宝贵且易于使用的工具(但尽量不要修改)。

首先,我们需要在属性表中找到属性 在此处输入图像描述

找到属性后,转到注册表并找到它的插入位置。 在此处输入图像描述

于 2016-11-08T15:59:17.930 回答