我继承了一个需要每小时运行一次的C#项目(exe文件)。它在一台旧服务器上运行得很好,但我没有访问该服务器来查看设置。我有它设置为作为Windows任务运行。任务运行但我得到错误:
System.Data.Entity异常,底层提供程序在打开时失败 - 用户登录失败
SQL Server是为Windows身份验证设置的。在使用Entity Framework的服务器上运行的网站连接得很好。此项目的配置文件设置为对其进行身份验证(与旧服务器相同的设置仅我更改的是数据源):
connection string="Data Source=WIN-FM8VFGOQQKN;
Initial Catalog=DatabaseNameHere;Integrated Security=True;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient
Windows任务设置为作为可以访问此数据库的Windows登录帐户运行。我猜测只是设置Windows任务来运行程序,因为Windows登录帐户不足以进行身份验证?
编辑添加信息:当我从作为计划任务的作者的同一用户登录的命令行运行exe文件时,它运行完美。当作为计划任务执行时尝试登录到SQL Server时,它仅抛出.NET异常。
我一直在搜索,但我能找到的只是与网络应用程序相关的解决方案。该程序未在IIS下运行。
环境:SQL Server 2012,asp.net 4.0,C#,Windows Server 2012 r2
答案 0 :(得分:2)
我想继续回答我自己的问题,因为我找不到任何其他解决方法。我不得不将SQL Server更改为混合模式身份验证,创建数据库用户,然后将我的连接字符串从Windows身份验证更改为SQL Server身份验证。之后,任务运行得很好。我很难相信没有办法解决这个问题,但我找不到任何东西。我在互联网上找到的所有其他帖子也表示他们必须更改为混合模式身份验证。真是浪费时间!
答案 1 :(得分:0)
检查是否设置了计划任务属性中的“以最高权限运行”。
我猜测只是设置Windows任务来运行程序,因为Windows登录帐户不足以进行身份验证?
计划任务的常见问题是用户帐户没有“以批处理登录”权限。这似乎不是问题所在,因为在缺少此权限的情况下,任务根本不会运行。
但请注意,可以通过Active Directory中的GPO(组策略)设置此权限,这意味着在本地设置此权限将被下一次GPO刷新覆盖。
并检查事件日志,通常会记录缺少登录/权限的问题。