摘要
虚拟应用程序包包含一个清单,该清单提供程序包的所有核心信息和默认设置。 如果要为特定用户或组调整这些默认值,可以创建和编辑用户配置文件 (UserConfig)。 UserConfig 文件允许你为程序包指定或修改自定义设置。 当程序包部署到运行 App-V 客户端的计算机时,这些设置将应用于特定用户。
症状
通过 App-V 管理控制台发布包含 UserConfig 文件的虚拟应用程序包可能会失败,原因是 SQL Server 2016 及更高版本处理数据类型的方式发生了更改。 有关该更改的详细信息,请参阅 KB4010261。 出现此问题的程序包的时间戳中将包含 7 位数的毫秒数,例如,“2019-12-30T14:41:57.7433333”。 可能成功发布的程序包的时间戳中包含两位数的毫秒数,例如,“2019-12-30T14:41:50.58”。
如果遇到此问题,可能会在详细日志记录中收到以下错误:
5756 [7]14D4.4320::12/10/19-08:28:34.9973489 [Microsoft.Windows.AppMan.AppV] LOGLEVEL=1, MESSAGE=Catalog: Failed to set the last modification time on policy file 'C:\Users\sgern\AppData\Roaming\Microsoft\AppV\Client\Catalog\Packages\{1D45F06B-874D-4A85-86EF-2330B430E47D}\{DB5DE6F6-15E8-4932-A7CF-2DA12EA5B068}\DynamicConfiguration.xml. Error code: 0x0FD0A725-00000057, FUNCTION=AppV::Client::Catalog::DocumentStoreImpl::SavePolicyDocumentToFile, LINENO=1078, UTCReplace_AppSessionGuid=true
从 Windows 返回错误 0x0FD0A725-00000057,表示“参数错误”
解决方法
若要缓解此问题,你可能需要执行以下操作之一:
-
使用 PowerShell 发布包。
-
将数据库的兼容性级别更改为低于 130。
-
更改用于时间戳的列的数据类型。
更改用于时间戳的列数据类型的示例脚本如下。 注意 你需要根据你的环境调整脚本中的 DB 名称。 重要 建议你在运行任何脚本之前备份 DB。
USE AppVManagement
GO
ALTER TABLE dbo.PackageEntitlements ALTER column UserConfigurationTimestamp datetime2(3)
GO
ALTER TABLE dbo.PackageVersions ALTER column TimeAdded datetime2(3)
GO
ALTER TABLE dbo.PackageVersions ALTER column TimeChanged datetime2(3)
GO
ALTER TABLE dbo.PackageVersions ALTER column TimeEnabled datetime2(3)
GO
ALTER TABLE dbo.PublishingServers ALTER column LastPublishingAttempt datetime2(3)
GO
注意 如果你通过 PowerShell 发布虚拟应用程序包,你将不会遇到此问题。