4

我创建了一个对Tridion.AudienceManagement.APIAPI 执行简单操作的控制台应用程序。当我启动应用程序时,它做的第一件事是 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。

4

1 回答 1

3

似乎不允许运行控制台应用程序的用户读取用于加密配置的加密密钥。

你有几个选择来解决它:

  1. 删除加密(不推荐)
  2. 以有权使用密钥的用户身份运行您的工具(即 MTSUser)
  3. 向您要运行该工具的用户授予权限。示例命令行:aspnet_regiis -pa "TridionRsaProtectedConfigurationProvider" "domain\username"

(显然需要以能够读取密钥的人的身份运行——MTSUser)

有关详细信息,请参阅以下 URL:

于 2013-01-24T16:49:49.537 回答