【发布时间】:2016-12-03 02:53:55
【问题描述】:
我正在尝试将服务从连接到公司本地服务器的本地 PC 移动到带有 SQL/Windows 2012 的第三方专用服务器。
如果我以 root 身份登录计算机并打开服务控件并为其授予“本地系统帐户”运行权限,那么这就像在我的脑海中敲钉子一样,并且此时服务正在运行(以及与桌面交互的能力——我有一个停止/启动 Win 表单,它为我提供了它连接到的第 3 方 API 的信息)——它运行。
它会运行,除非当它尝试连接到 localhost 数据库时,它需要将它炸毁,但以下情况除外:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接);
但是,如果我运行一个 .NET 程序,我会写给我有关机器的详细信息(例如驱动器、用户和登录时间、通过 localhost 发送电子邮件的能力、从外部 HTTP 请求获取服务器 IP)并连接到 localhost SQL Server 并使用与我的服务相同的连接字符串(DB、用户、PSW),然后它可以连接并提取有关 sys 视图和排序规则差异中的 SQL 用户的信息。
这是我在命令提示符下运行的控制台应用程序,就像我以 root 身份登录该框时一样,但我不必以管理员身份打开命令提示符,因为大多数其他应用程序需要取回这些详细信息并连接到相同的 SQL 数据库。
如果我只是尝试将服务更改为使用“现有帐户”或在框中输入 root 用户/psw 并尝试该服务甚至没有以“Windows 无法启动 xx本地计算机上的服务”,在事件查看器中,它只是一个未处理的 .NET 异常,似乎由于某种原因(权限 - 为什么它是 root 时?)无法记录到我为它创建的事件日志.
应用程序:BrainiacV2.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.Diagnostics.EventLogInternal.WriteEntry(System.String, System.Diagnostics.EventLogEntryType, Int32, Int16, Byte[]) 的 System.ArgumentException 在 System.Diagnostics.EventLog.WriteEntry(System.String, System.Diagnostics。 BrainiacV2.BrainiacJobs.WriteToEventLog(System.Exception, System.String) 上的 EventLogEntryType)
这些错误只发生在组合的 Windows 2012/SQL 服务器上,而不是我的 Win7 PC 和远程数据库服务器上。
我确实阅读了这篇文章以及许多其他人说本地用户帐户应该足以让它运行。
what Windows account should a service run under to access network sql servers
如果所有核心代码都在服务使用的 DLL 中,任何有关调试此问题的建议都将不胜感激。
【问题讨论】:
标签: .net sql-server windows-services user-permissions windows2012