软件随机自动启动时,sqlserver还没启动好,导致连接数据库失败

时间:2022-06-01 18:44:29
系统启动时,软件随机自动启动,但是那时sqlserver还没启动好,导致连接数据库失败,如何让软件依赖的服务先启动好再启动软件

17 个解决方案

#1


程序问题,先检测是否成功启动其它服务呗,不懂帮顶先

#2


你也可以用程序捕捉错误呀,没有启动的时候提示错误

#3


最好就是开机就启动。

#4


如果做成服务肯定没问题,可以把sqlserver依赖关系加进去,但是是一般的启动程序,需要系统登录进去后才能启动的就有这个问题

#5


软件本来就是开机就启动的,但是sqlserver还没启动好,软件就开起来了

#6


就是把sql服务,开机就启动嘛,免得麻烦

#7


sqlserver也是开机就启动的,但是有个顺序啊,软件先起来了,sqlserver服务后起来啊,怎么让是sqlserver服务先起来

#8


实在不行就先自动启动SQL 再启动你的程序

#9


这2个都加入系统的启动项了,问题就是软件启动比较快,看来不行的话只有用定时器去检测了

#10


如果你的软件可以修改,可以加以下机制处理

1、发现sql server不能连接,怎软件进入休眠,休眠时间可以设置。
2、休眠时间到的时候,尝试连接接数据库,能连接则进入正常状态,进行正常操作。否则再次休眠。

#11


引用 9 楼 ljmanage 的回复:
这2个都加入系统的启动项了,问题就是软件启动比较快,看来不行的话只有用定时器去检测了

启动时用命令行试试,这样就有先后了。

#12


网上找的---改变Windows服务的启动顺序
没有验证过,不知道对你是否有用。

要改变Windows服务的启动顺序,只要修改Windows的注册表就可 以了。任何Windows服务的注册信息可以在注册表的HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\\键下找到。下面就介绍几个与服务启动顺序相关的服务的值:

  Group值:一个REG_SZ类型的值。它用来描述服务属于那一个服务组。如果服务没有这一项,那么它不属于任何一个服务组,系统则会默认的将其在所有的服务启动后加载。

  Tag值:一个REG_DWORD类型的值。它用来描述服务的标识。每一个在服务组中的服务都会被分配一个唯一的标识。注册表通过对服务组的服务标识的排列来安排,同一服务组中的个服务的加载先后顺序。

  那么,如何改变服务的启动顺序,现在就被分为了两个步骤,一是:改变服务组的启动顺序。二是:改变服务组中各服务的启动顺序。

  先来介绍第一步:注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键的List值中保存了表示服务组启动顺序的信息。每一个服务组都是一个字符串,通过字符串在值中排列的先后位置表示服务组被加载的先后顺序。要想改变服务组的加载顺序,只要改变它们的位置就可以了。方法:用Regedit32.exe(不是,Regedit.exe,因为,在这里双击List值后,只能看到十六进制的数据,不便于修改。)打开该值,这是一个字符编辑环境,改变里面的组的先后顺序,然后确定改动。服务组的启动顺序就搞定了。

  第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList键下有各服务组中各服务启动顺序的信息。每个服务组信息都被保存为了一个REG_BINARY类型的值,如:Pointer Port 服务组的值为030000000200000001000000030000000。下面为了方便观察,我们把它处理为03000000 02000000 01000000 030000000 它表示Pointer Port 服务组有三个服务,TAG值为2的服务先加载,然后是TAG值为1的服务,最后是TAG值为3的服务加载(信息解读的顺序是从左到右)。要改变服务在组中的加载顺序,只要编辑这个二进制串就可以了。

  对于使用MSSQL数据库的BCHAT来说,最好是配置成先启动MSSQL,然后启动BCHAT_11433亦即dbd服务,最后启动各个聊天室服务如BCHAT_2000。默认情况下这些服务都没有设置GROUP值的,因此它们的之间的启动先后顺序是不确定的。为明确它们的先后顺序,可以如下操作:
  给MSSQLSERVER服务指定一个GROUP值,如:MSSQL ;
  给BCHAT_11433服务指定一个GROUP值,如:DBD ;
  其他BCHAT服务无需指定GROUP值;
  设置ServiceGroupOrder,在其列表最后分别加入“MSSQL”和“DBD”。


#13


以上修改不单用于机器启动的时候,也可用于sql server不稳定重启的情况

#14


sqlserver启动在先,但是启动慢,软件是可以改的,休眠还是用定时器好,不然界面会死掉,一点反应都没

#15


引用 14 楼 ljmanage 的回复:
sqlserver启动在先,但是启动慢,软件是可以改的,休眠还是用定时器好,不然界面会死掉,一点反应都没

嗯,捕捉错误后等吧

#16


引用 12 楼 andysun88 的回复:
网上找的---改变Windows服务的启动顺序
 没有验证过,不知道对你是否有用。
SQL code
要改变Windows服务的启动顺序,只要修改Windows的注册表就可 以了。任何Windows服务的注册信息可以在注册表的HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\\键下找到。下面就介绍几个与服务启动顺序相关的服务的值:

  Group值:一个REG_SZ类型的值。它用来描述服务属于那一个服务组。如果服务没有这一项,那么它不属于任何一个服务组,系统则会默认的将其在所有的服务启动后加载。

  Tag值:一个REG_DWORD类型的值。它用来描述服务的标识。每一个在服务组中的服务都会被分配一个唯一的标识。注册表通过对服务组的服务标识的排列来安排,同一服务组中的个服务的加载先后顺序。

  那么,如何改变服务的启动顺序,现在就被分为了两个步骤,一是:改变服务组的启动顺序。二是:改变服务组中各服务的启动顺序。

  先来介绍第一步:注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键的List值中保存了表示服务组启动顺序的信息。每一个服务组都是一个字符串,通过字符串在值中排列的先后位置表示服务组被加载的先后顺序。要想改变服务组的加载顺序,只要改变它们的位置就可以了。方法:用Regedit32.exe(不是,Regedit.exe,因为,在这里双击List值后,只能看到十六进制的数据,不便于修改。)打开该值,这是一个字符编辑环境,改变里面的组的先后顺序,然后确定改动。服务组的启动顺序就搞定了。

  第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList键下有各服务组中各服务启动顺序的信息。每个服务组信息都被保存为了一个REG_BINARY类型的值,如:Pointer Port 服务组的值为030000000200000001000000030000000。下面为了方便观察,我们把它处理为030000000200000001000000030000000 它表示Pointer Port 服务组有三个服务,TAG值为2的服务先加载,然后是TAG值为1的服务,最后是TAG值为3的服务加载(信息解读的顺序是从左到右)。要改变服务在组中的加载顺序,只要编辑这个二进制串就可以了。

  对于使用MSSQL数据库的BCHAT来说,最好是配置成先启动MSSQL,然后启动BCHAT_11433亦即dbd服务,最后启动各个聊天室服务如BCHAT_2000。默认情况下这些服务都没有设置GROUP值的,因此它们的之间的启动先后顺序是不确定的。为明确它们的先后顺序,可以如下操作:
  给MSSQLSERVER服务指定一个GROUP值,如:MSSQL ;
  给BCHAT_11433服务指定一个GROUP值,如:DBD ;
  其他BCHAT服务无需指定GROUP值;
  设置ServiceGroupOrder,在其列表最后分别加入“MSSQL”和“DBD”。



顶,太强了。

#17


结贴散分

#1


程序问题,先检测是否成功启动其它服务呗,不懂帮顶先

#2


你也可以用程序捕捉错误呀,没有启动的时候提示错误

#3


最好就是开机就启动。

#4


如果做成服务肯定没问题,可以把sqlserver依赖关系加进去,但是是一般的启动程序,需要系统登录进去后才能启动的就有这个问题

#5


软件本来就是开机就启动的,但是sqlserver还没启动好,软件就开起来了

#6


就是把sql服务,开机就启动嘛,免得麻烦

#7


sqlserver也是开机就启动的,但是有个顺序啊,软件先起来了,sqlserver服务后起来啊,怎么让是sqlserver服务先起来

#8


实在不行就先自动启动SQL 再启动你的程序

#9


这2个都加入系统的启动项了,问题就是软件启动比较快,看来不行的话只有用定时器去检测了

#10


如果你的软件可以修改,可以加以下机制处理

1、发现sql server不能连接,怎软件进入休眠,休眠时间可以设置。
2、休眠时间到的时候,尝试连接接数据库,能连接则进入正常状态,进行正常操作。否则再次休眠。

#11


引用 9 楼 ljmanage 的回复:
这2个都加入系统的启动项了,问题就是软件启动比较快,看来不行的话只有用定时器去检测了

启动时用命令行试试,这样就有先后了。

#12


网上找的---改变Windows服务的启动顺序
没有验证过,不知道对你是否有用。

要改变Windows服务的启动顺序,只要修改Windows的注册表就可 以了。任何Windows服务的注册信息可以在注册表的HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\\键下找到。下面就介绍几个与服务启动顺序相关的服务的值:

  Group值:一个REG_SZ类型的值。它用来描述服务属于那一个服务组。如果服务没有这一项,那么它不属于任何一个服务组,系统则会默认的将其在所有的服务启动后加载。

  Tag值:一个REG_DWORD类型的值。它用来描述服务的标识。每一个在服务组中的服务都会被分配一个唯一的标识。注册表通过对服务组的服务标识的排列来安排,同一服务组中的个服务的加载先后顺序。

  那么,如何改变服务的启动顺序,现在就被分为了两个步骤,一是:改变服务组的启动顺序。二是:改变服务组中各服务的启动顺序。

  先来介绍第一步:注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键的List值中保存了表示服务组启动顺序的信息。每一个服务组都是一个字符串,通过字符串在值中排列的先后位置表示服务组被加载的先后顺序。要想改变服务组的加载顺序,只要改变它们的位置就可以了。方法:用Regedit32.exe(不是,Regedit.exe,因为,在这里双击List值后,只能看到十六进制的数据,不便于修改。)打开该值,这是一个字符编辑环境,改变里面的组的先后顺序,然后确定改动。服务组的启动顺序就搞定了。

  第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList键下有各服务组中各服务启动顺序的信息。每个服务组信息都被保存为了一个REG_BINARY类型的值,如:Pointer Port 服务组的值为030000000200000001000000030000000。下面为了方便观察,我们把它处理为03000000 02000000 01000000 030000000 它表示Pointer Port 服务组有三个服务,TAG值为2的服务先加载,然后是TAG值为1的服务,最后是TAG值为3的服务加载(信息解读的顺序是从左到右)。要改变服务在组中的加载顺序,只要编辑这个二进制串就可以了。

  对于使用MSSQL数据库的BCHAT来说,最好是配置成先启动MSSQL,然后启动BCHAT_11433亦即dbd服务,最后启动各个聊天室服务如BCHAT_2000。默认情况下这些服务都没有设置GROUP值的,因此它们的之间的启动先后顺序是不确定的。为明确它们的先后顺序,可以如下操作:
  给MSSQLSERVER服务指定一个GROUP值,如:MSSQL ;
  给BCHAT_11433服务指定一个GROUP值,如:DBD ;
  其他BCHAT服务无需指定GROUP值;
  设置ServiceGroupOrder,在其列表最后分别加入“MSSQL”和“DBD”。


#13


以上修改不单用于机器启动的时候,也可用于sql server不稳定重启的情况

#14


sqlserver启动在先,但是启动慢,软件是可以改的,休眠还是用定时器好,不然界面会死掉,一点反应都没

#15


引用 14 楼 ljmanage 的回复:
sqlserver启动在先,但是启动慢,软件是可以改的,休眠还是用定时器好,不然界面会死掉,一点反应都没

嗯,捕捉错误后等吧

#16


引用 12 楼 andysun88 的回复:
网上找的---改变Windows服务的启动顺序
 没有验证过,不知道对你是否有用。
SQL code
要改变Windows服务的启动顺序,只要修改Windows的注册表就可 以了。任何Windows服务的注册信息可以在注册表的HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\\键下找到。下面就介绍几个与服务启动顺序相关的服务的值:

  Group值:一个REG_SZ类型的值。它用来描述服务属于那一个服务组。如果服务没有这一项,那么它不属于任何一个服务组,系统则会默认的将其在所有的服务启动后加载。

  Tag值:一个REG_DWORD类型的值。它用来描述服务的标识。每一个在服务组中的服务都会被分配一个唯一的标识。注册表通过对服务组的服务标识的排列来安排,同一服务组中的个服务的加载先后顺序。

  那么,如何改变服务的启动顺序,现在就被分为了两个步骤,一是:改变服务组的启动顺序。二是:改变服务组中各服务的启动顺序。

  先来介绍第一步:注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键的List值中保存了表示服务组启动顺序的信息。每一个服务组都是一个字符串,通过字符串在值中排列的先后位置表示服务组被加载的先后顺序。要想改变服务组的加载顺序,只要改变它们的位置就可以了。方法:用Regedit32.exe(不是,Regedit.exe,因为,在这里双击List值后,只能看到十六进制的数据,不便于修改。)打开该值,这是一个字符编辑环境,改变里面的组的先后顺序,然后确定改动。服务组的启动顺序就搞定了。

  第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList键下有各服务组中各服务启动顺序的信息。每个服务组信息都被保存为了一个REG_BINARY类型的值,如:Pointer Port 服务组的值为030000000200000001000000030000000。下面为了方便观察,我们把它处理为030000000200000001000000030000000 它表示Pointer Port 服务组有三个服务,TAG值为2的服务先加载,然后是TAG值为1的服务,最后是TAG值为3的服务加载(信息解读的顺序是从左到右)。要改变服务在组中的加载顺序,只要编辑这个二进制串就可以了。

  对于使用MSSQL数据库的BCHAT来说,最好是配置成先启动MSSQL,然后启动BCHAT_11433亦即dbd服务,最后启动各个聊天室服务如BCHAT_2000。默认情况下这些服务都没有设置GROUP值的,因此它们的之间的启动先后顺序是不确定的。为明确它们的先后顺序,可以如下操作:
  给MSSQLSERVER服务指定一个GROUP值,如:MSSQL ;
  给BCHAT_11433服务指定一个GROUP值,如:DBD ;
  其他BCHAT服务无需指定GROUP值;
  设置ServiceGroupOrder,在其列表最后分别加入“MSSQL”和“DBD”。



顶,太强了。

#17


结贴散分