小弟想在安装盘中集成sqlserver2005 express版,想在静默安装时指定端口,NSIS代码如下:
SetOutPath "$INSTDIR\SetupPrerequisites\SQLEXPR_CHS"
nsExec::Exec "cmd /C setup.exe /settings $INSTDIR\SetupPrerequisites\SQLEXPR_CHS\template.ini /qn"
template.ini里内容如下:
[Options]
INSTALLSQLDIR="C:\Program Files\Microsoft SQL Server\"
INSTALLOLAPDATADIR="C:\Program Files\Microsoft SQL Server\MSSQL\OLAP\Data"
ADDLOCAL=ALL
SECURITYMODE=SQL
INSTANCENAME=EHUISUANDATA
DISABLENETWORKPROTOCOLS=0
SAPWD=sa123456
SQLAUTOSTART=1
AGTAUTOSTART=0
ASAUTOSTART=1
RSAUTOSTART=1
请问大牛们该如何实现?
PS:如果不能在安装时指定端口,就之后在安装之后修改注册表来监听我自己指定的端口,需要重启数据库服务,这个过程放在安装盘里时间较长,有什么好的解决方案

解决方案 »

  1.   

    SQL2005提供了一个SQL BROWER服务,开启这个服务后,就可以通过查询SQL BROWER服务 就可以知道SQL2005现在正在使用哪个端口,运行SQL配置管理程序,找到SQL的实例名称下面的协议,双击右边的TCP/IP协议,在第二选项卡中IPALL里面输入SQL运行的端口就可以了。
      

  2.   

    “在安装之后修改注册表来监听我自己指定的端口,需要重启数据库服务”直接加一个batch,利用reg命令修改端口,利用net stop&&net start重启服务就行了,将这个batch做为NSIS安装SQL之后再执行就行了吧
      

  3.   

    这个过程用NSIS的脚本已经实现了,代码如下:
    nsExec::Exec "cmd /C setup.exe /settings $INSTDIR\SetupPrerequisites\SQLEXPR_CHS\template.ini /qn"
    ;改注册表,监听sqlserver的指定端口,改了之后需要重启数据库服务,这里也比较耽误时间
    ${registry::Read} "${PRODUCT_UNINST_ROOT_KEY\${PRODUCT_DB_INSTANCE_NAME}" "${PRODUCT_DB_SERVICES_NAME}" $R0 $R1
    ${If} $R1 == ""
    MessageBox MB_OK|MB_ICONSTOP "数据库实例名对应数据库服务不存在"
    Abort
    ${Else}
    MessageBox MB_OK $R0
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "Software\Microsoft\Microsoft SQL Server\$R0\MSSQLServer\SuperSocketNetLib\Tcp\IPAll" "TcpDynamicPorts" ""
    WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "Software\Microsoft\Microsoft SQL Server\$R0\MSSQLServer\SuperSocketNetLib\Tcp\IPAll" "TcpPort" "${PRODUCT_DB_DEFAULT_PORT}"
    nsExec::Exec "cmd /C sc stop MSSQL$$${PRODUCT_DB_SERVICES_NAME}"
    Sleep 3000
    MessageBox MB_OK "E汇算数据库端口号为${PRODUCT_DB_DEFAULT_PORT}"
    ${EndIf}
    现在的问题是,能否在安装sqlserverexpress过程中就指定端口并监听,而不是安装sqlserver结束后再修改,还得重启服务才能生效
      

  4.   

    看来只能等sqlserver结束后再修改,然后重启服务生效了,结贴散分了