我有 3 个实例,它们都使用一个数据库,我想要所有 3 个实例的安装 ID。
我已经尝试过 PXLicenseHelper.InstallationID 但它仅返回当前实例的安装 ID。
PXLicenseHelper.InstallationID
有什么方法可以让我一次获得所有 3 个实例的安装 ID。
我有 3 个实例,它们都使用一个数据库,我想要所有 3 个实例的安装 ID。
我已经尝试过 PXLicenseHelper.InstallationID 但它仅返回当前实例的安装 ID。
PXLicenseHelper.InstallationID
有什么方法可以让我一次获得所有 3 个实例的安装 ID。
在对此安装 ID 进行了一些研究后,我得出以下结论:
Acumatica 是基于InstallationIDBase
+的计算安装 ID PXDatabase.Provider.SchemaCache.DatabaseName
。这可以从 PXDBFeaturedAccessProvider 的安装 ID 属性 getter(如下所示)中看到。
// Token: 0x170019A8 RID: 6568
// (get) Token: 0x06008B0D RID: 35597 RVA: 0x0026A52C File Offset: 0x0026872C
public override byte[] InstallationID
{
get
{
return PXCriptoHelper.CalculateSHA(PXLicenseHelper.InstallationIdBase + PXDatabase.Provider.SchemaCache.DatabaseName);
}
}
InstallationIDBase
是根据 、 、 和 计算的,HostName
这UserOfTheProcess
部分SiteName
可以ApplicationVirtualPath
从PXLicenseHelper
的GetBaseInstallationId
方法中找到(如下图)。
// Token: 0x060092DB RID: 37595 RVA: 0x00290A40 File Offset: 0x0028EC40
internal static string GetBaseInstallationId(Serilog.ILogger logger, LogEventLevel level)
{
string hostName = Dns.GetHostName();
string userOfTheProcess = PXInstanceHelper.UserOfTheProcess;
string siteName = HostingEnvironment.SiteName;
string applicationVirtualPath = HostingEnvironment.ApplicationVirtualPath;
string installationIdBase = hostName + userOfTheProcess + siteName + applicationVirtualPath;
if (logger != null && logger.IsEnabled(level))
{
logger.ForContext("DnsHostName", hostName, false).ForContext("WindowsUser", userOfTheProcess, false).ForContext("SiteName", siteName, false).ForContext("ApplicationVirtualPath", applicationVirtualPath, false).Write<string>(level, "Base installation ID is {BaseInstallationId}", installationIdBase);
}
return installationIdBase;
}
UserOfTheProcess
结论是,从技术上讲,如果您为每个实例使用不同的用户用于 IIS 应用程序池,那么您总是会遇到问题。如果您的所有实例都使用同一个用户,那么区别应该只在SiteName
和ApplicationVirtualPath
不是那么重要,可以从HostingEnvironment
.
如果我正在寻找 Acumatica 的错误部分,我希望HB_Acumatica或RuslanDev可以为我的答案添加更多细节或纠正我。
我认为代码不可能,因为安装 ID 是基于站点的。
您将需要数据库中的某些内容来为您提供该信息。您可以尝试查看Licensing
InstallationID 列中的表格。我假设使用 3 个许可实例,您将在此表中有 3 个许可条目。
如果其他人有这方面的一些信息,我很想听听。