我们正在从本地构建服务器迁移到 Azure Pipelines。我们生产“收缩包装”桌面软件,因此很明显我们需要在发布之前对所有二进制文件进行签名。我们当前的构建基础架构使用 GlobalSign 的 USB 硬件令牌来完成此操作,但显然,当我们进行云构建时,这将不起作用 - 遗憾的是,云没有配备 USB 端口:D
现在,GlobalSign 最近开始宣传Azure Key Vault 作为密钥存储选项,他们非常乐意将其出售给我们,但我不确定我们实际上如何将其与我们的构建管道集成(或者确实是这样)甚至可能)。
有没有人真正做过这项工作?
我们有一些相当占用 CPU、RAM 和 I/O 的代码(它会创建大量临时文件、解压缩、调整大小和压缩图像)。我们正在尝试将其集成到“无服务器”Web 应用程序中,并且在我们在 Azure Functions 上对其进行测试时,我们的代码仅在 Windows 上运行。
我们观察到,我们的代码在 Azure Functions 上的运行速度比在我的本地工作站(Core i7-4790、16GB RAM、SSD)上慢得多。例如,一个典型的工作负载为我们提供了以下时间安排:
Dev workstation: 2.47 sec
Azure Functions, "App Service" plan (S3 size): 10.59 sec
Azure Functions, "Consumption" plan: 15.96 sec
Run Code Online (Sandbox Code Playgroud)
我们还发现,在“消耗”计划中,时间差异很大 - 一项特定工作给我们的时间在 112 到 153 秒之间变化。S3“应用服务”计划中的相同作业耗时 117 到 119 秒,在我的工作站上耗时约 31 秒。
P3 上的时间与 S3 相似,这与我的预期差不多,因为 CPU 和 RAM 规格相同。
所以我真的有几个问题:
我们发布了一个Windows桌面应用程序(使用带有v120_xp平台工具集的Visual C++ 2013构建),它在Windows 10上运行良好,但我们已经开始接收安装了"Threshold 2"更新的用户的报告,我们的应用程序现在无法更新开始,显示以下错误消息:
应用程序无法正确启动(0xc0000142).单击"确定"关闭应用程序.
错误代码是STATUS_DLL_INIT_FAILED,因此我们可能正在寻找无法初始化的DLL.
我们已经尝试通过观察在调试器中启动的应用程序并使用Process Monitor查看正在加载哪些DLL来对此进行故障排除.加载的最后一个DLL(在安装了阈值2的计算机上)是"davhlpr.dll".当我们在没有阈值2的Windows 10上观看我们的应用程序启动时,它开始时根本没有加载该DLL.这表明该问题可能与davhlpr.dll有关,但我们的代码并没有明确依赖于该DLL,我不知道它是什么.
有没有人见过这样的东西?
有没有人对我们如何解决这个问题有任何想法?在尝试调试器和Process Monitor之后,我没有想法.
我们正在构建一个基于Windows的应用程序,它以递归方式遍历目录结构,查找满足特定条件的文件,然后对它们进行一些处理.为了决定是否处理特定文件,我们必须打开该文件并阅读其中的一些内容.
这种方法原则上看起来很棒,但是一些测试早期版本应用程序的客户报告说它正在改变大量文件的最后访问时间(这并不奇怪,因为它实际上是访问文件).这对于这些客户来说是一个问题,因为他们根据上次访问的文件时间(例如,他们存档过去12个月内未访问过的文件)具有存档策略.由于我们的应用程序计划比存档"窗口"更频繁地运行,因此我们有效地阻止了这些文件的任何存档.
我们尝试添加一些代码来保存每个文件的最后访问时间,然后再读取它,之后再写回来(我知道这很糟糕),但这会导致另一个基于文件系统事务日志进行增量备份的客户出现问题.我们对文件上次访问时间的显式设置导致这些文件包含在每个增量备份中,即使它们实际上没有更改.
所以这就是问题:在Windows环境中有什么办法可以在没有最后访问时间的情况下读取文件吗?
提前致谢!
编辑:尽管"ntfs"标签,我们实际上不能依赖文件系统是NTFS.我们的许多客户通过网络运行我们的应用程序,因此它可能只是另一端的任何东西.