背景
我们正在使用 System Center 2012 在运行 Windows 8 Enterprise x64 的现场将 Windows 8 Metro 风格的应用程序部署到三星平板电脑。平板已加入域,并与域建立持久的 DirectAccess 连接,从而允许 System Center 将应用程序和更新推送到设备。
我们必须将我们的应用程序部署到现场可能有数百台设备,这就是我们采用 System Center 路线的原因。代码签名证书使用组策略安装在每台设备上。要部署应用程序,您只需提供包输出并指定要安装它的设备集合。该应用程序会在几分钟后出现在设备上。
我们遇到的问题是,当 System Center 部署我们的应用程序时,SQLite 依赖项丢失了,我们的数据访问都不起作用。
关于我们的项目
我们的应用程序是一个使用 SQLite 作为后端的 WinJS 应用程序。但是,我们所有的数据访问代码都在 WinJS 项目引用的 C# WinMD 项目中。我们正在使用sqlite-net库与 SQLite 对话——我们在 C# 项目中包含了它的源代码。
在 Visual Studio 中,我们安装了用于 Windows 运行时扩展的 SQLite,如Tim Heuer 的文章中所述。Metro 应用程序引用了这一点。
使用其他部署方法进行测试
当您在本地调试或运行它时,来自应用程序的 SQLite 数据访问工作正常 - 在调试/发布和 x86/x64 中。
应用程序打包过程提供了一个 PowerShell 脚本,您可以使用它来安装应用程序,并在必要时提供开发人员许可证。使用 PowerShell 脚本安装我们的应用程序时,SQLite 数据访问也可以正常工作。通过打包和安装应用程序的 Debug/Release 和 x86/x64 版本来验证这一点。
故障排除
当应用程序第一次尝试使用 SQLite 时,我们看到一个关于它无法找到 sqlite3.dll 的异常。
我们已经尝试/验证了以下内容:
- 确认我们正在部署 Release/x64 构建
- 检查 WinRAR 中的 appx 并验证它是否包含 sqlite3.dll
- 从 C# 项目而不是 WinJS 项目中引用“SQLite for Windows Runtime”扩展
- 还要引用 C++ 运行时,这会导致 System Center 在部署应用程序时失败。不知道为什么,但正在调查它。
更新 问题是 System Center 在部署 SQLite 库所需的 Visual C++ 运行时库依赖项时遇到问题。所以不幸的是,这不再是一个编程问题。我们正在为此获得一些帮助,我将发布修复程序。