部署使用SQLite的Windows 8 Metro应用程序

Geo*_*rzi 16 sql sqlite microsoft-metro windows-8 winjs

背景

我们正在使用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中,我们安装了SQL Run for Windows Runtime扩展,如Tim Heuer的文章中所述.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++运行时库依赖项时遇到问题.所以不幸的是,这不再是一个编程问题了.我们正在获得一些帮助,我将发布修复程序.

Geo*_*rzi 3

我想发布我们正在进行的临时修复的详细信息。我们也更接近问题的根源,所以我也想提供这些细节。

问题回顾

当从 Metro 项目引用 Visual C++ 运行时包时,System Center 无法将应用程序部署到设备,因为为适当的体系结构和构建风格部署正确版本的依赖项时出现问题。

我们运行 Visual Studio 2012(并打包项目以进行部署)的开发计算机使用的 Visual C++ 运行时 (50727) 版本比全新安装的 Windows 8 (50712) 中提供的版本更新。

与 System Center 团队合作,确认这是我们正在使用的版本中的一个错误,并且已在未来的版本中得到解决。我们将致力于升级环境,但这需要几周的时间。

解决方法

我确认并测试了以下解决方法:

工作起来就像一个魅力,因为依赖项的正确版本已经存在。如果我们选择同时针对 x86 和 ARM,显然这不是一个长期的解决方案,但它将帮助我们克服这个困难。