背景
我们使用 System Center 2012 在运行 Windows 8 Enterprise x64 的 Samsung 平板电脑上部署 Windows 8 Metro 样式的应用程序。这些平板电脑加入了域,并且与其保持持久的 DirectAccess 连接,使得 System Center 可以将应用程序和更新推送到设备上。
我们需要在外出工作的数百台设备上部署应用程序,这就是我们采用 System Center 的原因。代码签名证书通过组策略安装在每个设备上。要部署应用程序,只需提供包输出并指定要在其中安装应用程序的设备集合。几分钟后应用程序就会在设备上显示。
我们遇到的问题是,在 System Center 部署我们的应用程序时,SQLite 依赖项丢失,导致我们的数据访问无法工作。
关于我们的项目
我们的应用程序是一个 WinJS 应用程序,使用 SQLite 作为后端。然而,我们所有的数据访问代码都在一个 C# WinMD 项目中,WinJS 项目引用该项目。我们使用 sqlite-net 库来访问 SQLite - 我们将其源代码包含在我们的 C# 项目中。
在 Visual Studio 中,我们按照 Tim Heuer 的文章所述安装了SQLite for Windows Runtime 扩展程序。Metro 应用程序引用了这个扩展。
使用其他部署方法进行测试
当您在本地调试或运行它时,应用程序可以正常访问 SQLite 数据 - 在 Debug/Release 和 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 ++ Runtime Library依赖项时遇到了问题。 因此,很遗憾,这不再是一个编程问题。 我们正在得到一些帮助,我将发布解决方法。