2011-05-03 72 views
25

我在Windows 2003機器上遇到了一些挑戰,我需要在不是80的端口上運行Web部署代理。默認情況下,MsDepSvc會在http:// [server]處公開端點,/MsDeployAgentService顯然隱式偵聽端口80.Web部署代理可以在IIS6上的80以外的端口上運行嗎?

我遇到的問題是該機器也運行使用端口80的Visual SVN服務器,因此Web部署代理服務拒絕啓動。 (至少這是我可以繪製的唯一合乎邏輯的結論。)我在同一臺機器上有一個小型的SVN管理應用程序,我想通過Web部署發佈這個難題。

是否可以在另一個端口上運行代理?顯然,如果這是IIS7,我們將在8172上,一切都會好的,但不幸的是,這不是這種情況。有什麼建議麼?

回答

60

有幾個方法可以做到這一點:

選項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.

    /a開關應匹配由httpcfg query urlacl命令報告的ACL中指定的ACL

  5. 重新啓動msdepsvc(net start msdepsvc)。

  6. 可以確認該服務是通過做端口8172監聽:

    netstat -an 
    

    您應該看到以下內容:

    TCP 0.0.0.0:8172   0.0.0.0:0    LISTENING 
    

警告:

我會先在非生產機器上嘗試這個以確保它這符合您的預期。

+1

Epic fu there Kev - 如果這是ebay,我會是「AAAA ++++」你說的是showa – Doug 2011-05-17 04:49:57

+5

我剛剛在搜索同一個問題時找到了這個答案,但影響到了Windows 7的一個盒子,我改變了使用'netsh'命令的方式。參考:http://msdn.microsoft.com/en-us/library/ms733768.aspx – 2011-10-29 17:24:18

+0

我得到以下錯誤和更改端口爲我工作。 「因爲發生套接字錯誤(10054)而重試同步。在對象sitemanifest(sourcePath)上重試操作'序列化'。」服務器端事件日誌包含「System.Net.HttpListenerException:嘗試在不存在的網絡連接上執行操作。」感謝您的修復。 – Matt 2012-01-16 18:58:01

24

這些是我對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)

+1

這對我開始服務,但在IIS中仍然缺少管理圖標。任何想法? – riaandelange 2013-04-26 19:09:57

+0

感謝它爲我工作 – Anil 2016-01-20 06:13:18

7

對於什麼是值得,我將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: [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% 

閱讀更多:

+0

剛碰到這個。很好的適應+1 :) – Kev 2013-04-18 20:53:37

+0

謝謝 - 我得到一個錯誤,雖然: 「網址預訂添加失敗,錯誤:183」 「無法創建文件時,該文件已存在」 – niico 2013-12-02 19:55:32

+0

嗨@niico,你想要什麼端口號使用,你確定它是一個未使用的端口,你在錯誤信息之前看到了什麼輸出? – 2013-12-02 20:12:09

0

這也是值得了解的背後找出什麼屬性存儲在該註冊表項中的魔力 - 進入Orca.exe - 無價並使用簡單的工具讀取/修改MSI數據庫(儘量不要修改)。

首先,我們需要找到在屬性表 enter image description here

一旦財產被發現的財產,去註冊表表並找到它插入。 enter image description here

相關問題