我创建了一个对Tridion.AudienceManagement.API
API 执行简单操作的控制台应用程序。当我启动应用程序时,它做的第一件事是 reference UserContext.Current
,此时我得到以下异常。
The type initializer for 'Tridion.AudienceManagement.DomainModel.Utilities.Configuration' threw an exception.
at Tridion.AudienceManagement.DomainModel.Utilities.Configuration.get_LogFolder()
at Tridion.AudienceManagement.DomainModel.Utilities.Logger.AssertValidLogFolder()
at Tridion.AudienceManagement.DomainModel.Utilities.Logger.WriteLine(LogLevel logLevel, String message, Object[] objects)
at Tridion.AudienceManagement.DomainModel.ServiceClient.ContentManagerClient.LogBindingInfo(Exception ex)
at Tridion.AudienceManagement.DomainModel.ServiceClient.ContentManagerClient.GetConfiguredCoreService()
at Tridion.AudienceManagement.DomainModel.ServiceClient.ContentManagerClient.GetClient(UserContext userContext, UserData& userData)
at Tridion.AudienceManagement.DomainModel.ServiceClient.ContentManagerClient.LoadCurrentUser(UserContext userContext, String userDataXml)
at Tridion.AudienceManagement.DomainModel.UserContext..ctor(String trusteeName)
at Tridion.AudienceManagement.API.UserContext..ctor()
at Tridion.AudienceManagement.API.UserContext.get_Current()
我已确认 Audience Manager 已安装并在服务器上运行。
通过从以 MTS 用户身份登录的 shell 运行程序,我们可以避免这个问题。起初我们认为问题在于日志文件夹的文件系统权限,但是,即使授予完全控制权也无济于事。
当比较作为两个用户运行代码的 procmon 输出时,我们可以看到失败的用户在 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中创建文件而被拒绝访问 - 文件名很长看起来随机的字符串。MtsUser 看不到此 ACCESS DENIED。