我正试图将一项服务从连接到公司本地服务器的本地PC移动到使用SQL/Windows 2012的第3方专用服务器。
这就像敲钉子在我的头上越来越远,因为我有,目前的服务运行,如果我登录到计算机作为根,打开服务控制,并给它"本地系统帐户"特权运行(和能力,与桌面接口-我有一个停止/启动Win窗体,给我关于它连接到的第三方API的信息)-它运行。
也就是说,它会运行,但当它尝试连接到本地主机数据库时,它需要弹出,但出现以下异常:建立与SQL Server的连接时出现与网络相关的或特定于示例的错误。找不到服务器或无法访问服务器。请验证示例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接);
但是,如果我运行一个. NET程序,我编写了这个程序来提供有关计算机的详细信息(例如驱动器、用户和登录时间、使用本地主机发送电子邮件的能力、从外部HTTP请求获取服务器IP)并使用相同的连接字符串连接到本地主机SQL Server和(DB、User、PSW)作为我的服务,那么它就可以连接并提取sys视图中有关SQL用户的信息和排序规则差异。
这是一个控制台应用程序,我在命令提示符下运行,就像我以root用户身份登录时一样,但我不必像大多数其他应用程序那样以管理员身份打开命令提示符来获取这些详细信息并连接到同一个SQL DB。
如果我只是尝试将服务更改为使用"现有帐户"或在框中输入root用户/psw并尝试,则服务甚至不会以"Windows无法在本地计算机上启动xx服务"开始,在事件查看器中,它只是一个未处理的. NET异常,似乎由于某种原因无法启动(权限-为什么当它是根?)错误记录到事件日志,我已经为它创建.
适用范围:BrainiacV2.exe框架版本:版本4.0.30319描述:由于出现未处理的异常,进程已终止。异常信息:BrainiacV2.BrainiacJobs.WriteToEventLog(系统.异常,系统.字符串)中的系统.参数异常,系统.诊断.事件日志内部.写入条目(系统.字符串,系统.诊断.事件日志条目类型,Int32,Int16,字节[])中的系统.参数异常,BrainiacV2.BrainiacJobs.WriteToEventLog(系统.异常,系统.字符串)中的系统.参数异常
这些错误只发生在组合的Windows 2012/SQL服务器上,而不是我的Win7 PC和远程DB服务器上。
我确实读过这篇文章,以及许多其他人说,本地用户帐户应该足以让它运行。
what Windows account should a service run under to access network sql servers
当所有核心代码都在服务使用的DLL中时,如果您有任何调试建议,我们将不胜感激。
1条答案
按热度按时间jyztefdp1#
你的问题很难理解,不过我尽量理解。
Windows上没有"root",除非有人创建了一个具有该名称的帐户。
我有停止/启动赢单
Windows服务中不能有窗体。它没有桌面,因此不允许。
并给它"本地系统帐户"权限运行。我有一个停止/启动赢表单,给我关于它连接的第3方API的信息)-它运行。
LocalSystem帐户仅限于运行它的计算机。它没有网络权限。如果数据库位于另一台计算机上,则无法连接到该计算机。解决方案是以具有正确权限的用户身份运行服务。
(and与台式机交互的能力-
这在更高版本的Windows中不起作用,即使起作用也是不可靠和不可预测的。
提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接);
这意味着未在SQL Server上配置命名管道提供程序,而您正在尝试使用它。您可以对其进行配置,也可以将连接切换到实际在SQL Server中配置的提供程序。也有可能无法使用您指定的名称访问该服务器。是否可以使用您指定的名称ping该服务器?
最后一条消息表明您没有顶级的try/catch块,这意味着错误是致命的,您需要捕获和处理它们,尤其是在服务中。
如果你能使你的问题更容易理解,并缩小你的确切问题,我可能会给你更多的帮助。