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

16

背景

我们使用 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依赖项时遇到了问题。 因此,很遗憾,这不再是一个编程问题。 我们正在得到一些帮助,我将发布解决方法。


1
问题归结为部署问题的话题仍然可以成为 Stack Overflow 的主题。毕竟,如果程序无法部署,那么它就没有多大用处... - Donal Fellows
1个回答

3

我想发布一些我们正在使用的临时解决方法的详细信息。同时,我们已经更接近问题的根本,所以我也想提供这些详情。

问题回顾

当从我们的Metro项目引用Visual C ++ Runtime Package时,System Center无法将应用程序部署到设备上,因为存在问题,无法为适当的架构和构建风格部署正确版本的依赖项。

我们运行Visual Studio 2012并打包项目以进行部署的开发机器正在使用Visual C ++ Runtime的新版本(50727),而在Windows 8的初始安装中,该版本不可用(50712)。

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

解决方法

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

非常完美,因为正确版本的依赖关系已经存在。如果我们还要针对x86和ARM,则显然不是长期解决方案,但可以让我们克服这个障碍。


你好,目前在App Store上部署带有SQLite的应用程序是否有“正常方式”?谢谢。 - Myth Rush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接