背景
我们正在使用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中,我们按照Tim Heuer's article中的说明安装了 SQLite for Windows运行时扩展。 Metro应用程序引用了这个。
使用其他部署方法进行测试
当您在本地调试或运行它时,应用程序的SQLite数据访问工作正常 - 在Debug / Release和x86 / x64中。
应用程序打包过程提供了一个PowerShell脚本,您可以根据需要使用该脚本来安装应用程序和开发人员许可证。使用PowerShell脚本安装我们的应用程序时,SQLite数据访问也可以正常工作。通过打包和安装应用程序的Debug / Release和x86 / x64版本来验证这一点。
疑难解答
当应用程序首次尝试使用SQLite时,我们会看到有关它无法找到sqlite3.dll的异常。
我们已经尝试/验证了以下内容:
更新 问题是System Center在部署SQLite库所需的Visual C ++运行时库依赖项时遇到问题。所以不幸的是,这不再是一个编程问题了。我们正在获得一些帮助,我将发布修复程序。
答案 0 :(得分:3)
我想发布一个我们要使用的临时修复程序的详细信息。我们也更接近问题的根源,所以我也希望提供这些细节。
回顾问题
从Metro项目引用Visual C ++运行时包时,System Center无法将应用程序部署到设备,因为在为适当的体系结构和构建风格部署适当版本的依赖项时出现问题。
我们运行Visual Studio 2012的开发计算机(以及打包项目以进行部署)使用的是较新版本的Visual C ++ Runtime(50727),而不是全新安装的Windows 8(50712)。
与System Center团队合作并确认这是我们使用的版本中的错误,并且已在未来的版本中得到解决。我们将努力改善环境,但这需要几周的时间。
解决方法强>
我确认并测试了以下解决方法:
像魅力一样工作,因为依赖的正确版本已经存在。如果我们选择同时针对x86和ARM,显然不是一个长期的解决方案,但会让我们超越这个驼峰。