每个实例都应该有一个不同的 SID,因为机器是使用 generalize 选项进行系统准备的(当您想要提供自定义映像时同样适用)。您可以使用此问题中的代码获取 SID ,并将其用作标识符:
string domainName;
Helper.SID_NAME_USE accountType;
SecurityIdentifier machineSID =
Helper.LookupAccountName("", Environment.MachineName, out domainName, out accountType);
注意:即使它在代码中显示 domainName,您的机器也不需要在域中才能正常工作。
要在 VM 上设置“自定义标识符”,您可以使用环境变量。由于您使用的是 Java,因此设置这些的最简单方法可能是setx.exe命令行工具(下载)。您可以像这样调用该工具:
setx.exe VmIdentifier 123 -m
然后你应该能够使用系统阅读它:
System.getenv("VmIdentifier")
我不清楚您使用的是虚拟机 (IaaS) 还是云服务 (PaaS)。如果您使用的是虚拟机,则由您自行部署应用程序,在此过程中,您还可以执行setx.exe。
现在,如果您使用云服务,您实际上上传了一个部署在您的实例上的包。您还可以获得对启动任务(在应用程序启动之前运行)的支持:How to Define Startup Tasks for a Role。您可以使用启动任务来运行 setx.exe,但请确保在 executionContext 设置为提升的情况下运行它。