16

背景

我们正在使用 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++ 运行时库依赖项时遇到问题。所以不幸的是,这不再是一个编程问题。我们正在为此获得一些帮助,我将发布修复程序。

4

1 回答 1

3

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

问题回顾

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

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

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

解决方法

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

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

于 2012-09-11T01:27:40.877 回答