我有一个 WPF 应用程序连接到 SQL Server 2014 Express LocalDB(即本地数据库).mdf
数据库文件)。
该应用程序使用 Entity Framework Core 库版本 7.0.0-rc1-final。
这是我正在使用的连接字符串:
data source=(LocalDb)\InstanceLocalDB; Initial Catalog = MyAppDB; Integrated Security=True; MultipleActiveResultSets=True; Connection Timeout = 10
我在应用程序的设置过程中安装了 SQL Server LocalDB。这同样适用于创建和启动SqlLocalDB
实例,使用以下命令执行:
SqlLocalDB.exe create "SqlLocalDBInstance"
SqlLocalDB.exe start "SqlLocalDBInstance"
该应用程序在大约 50 台 PC 上成功运行,但在两台 PC 上失败,如下所示:
起初,应用程序成功与数据库通信,但一段时间后,如果没有任何活动,实例将自动停止(大约 10 分钟后),此后无法再次重新连接,从而导致以下错误:
您的 SQL Server 安装已损坏或已被篡改(未知的包 ID)。
使用上面提到的相同命令行手动启动 LocalDB 实例:
SqlLocalDB.exe start "SqlLocalDBInstance"
应用程序成功与数据库通信,直到 LocalDB 实例下次停止,依此类推。
Windows 日志显示以下错误:
Windows API 调用 WaitForMultipleObjects 返回错误代码:575。
Windows 系统错误消息是:{应用程序错误} 应用程序无法正确启动 (0x%lx)。单击“确定”关闭应用程序。
SQL LocalDB 日志文件提供了此通知消息:
RANU 实例因内部超时而终止。这只是一条信息性消息。无需用户操作。
我已经安装并重新安装了一遍(Microsoft SQL Server 2014 Express 并删除了.mdf
and .ldf
文件),并不断收到相同的错误。
我注意到两台有问题的机器上的 UAC 都被关闭了;所以我尝试在关闭 UAC 的测试机器上重现该问题 - 没有任何问题重现。
这 2 台有问题的机器在 Windows 10 pro 64 位下运行。
最后,经过进一步调查,我通过重命名应用程序文件夹或更改其位置找到了解决方法。
我如何识别解决方案?
我已将整个应用程序文件夹(及其所有二进制文件)重新定位到“C:\Program Files (x86)”之外
目录复制到“C:\”路径内的其他目录,问题就消失了。
以同样的方式,我将应用程序文件夹移回原来的位置;只是现在我改变了
应用程序文件夹的名称,然后它再次工作。
也许问题与目录权限有关。
尽管如此,我还是做了以下步骤,但没有成功:
取消选中文件夹属性的“只读”选项。
启用应用程序文件夹的所有“安全”权限。
注意:我正在一个具有各种自定义策略的组织域中工作......
我的下一步行动是使用一些实用工具提取应用程序文件夹的所有权限,然后尝试追踪问题的根源。你能为我推荐一些工具吗?