Czy istnieje sposób za pomocą ArcObjects.net, aby dowiedzieć się, która wersja ArcGIS jest zainstalowana na komputerze (tj. 9.3., 10.0, 10.1)?
Czy istnieje sposób za pomocą ArcObjects.net, aby dowiedzieć się, która wersja ArcGIS jest zainstalowana na komputerze (tj. 9.3., 10.0, 10.1)?
Odpowiedzi:
W ArcObjects .NET użyj RuntimeManager, np .:
Lista wszystkich zainstalowanych środowisk uruchomieniowych:
var runtimes = RuntimeManager.InstalledRuntimes;
foreach (RuntimeInfo runtime in runtimes)
{
System.Diagnostics.Debug.Print(runtime.Path);
System.Diagnostics.Debug.Print(runtime.Version);
System.Diagnostics.Debug.Print(runtime.Product.ToString());
}
lub, aby uzyskać aktualnie aktywny środowisko wykonawcze:
bool succeeded = ESRI.ArcGIS.RuntimeManager.Bind(ProductCode.EngineOrDesktop);
if (succeeded)
{
RuntimeInfo activeRunTimeInfo = RuntimeManager.ActiveRuntime;
System.Diagnostics.Debug.Print(activeRunTimeInfo.Product.ToString());
}
Również w Arcpy możesz użyć GetInstallInfo .
RuntimeManager
został wprowadzony wraz z ArcGIS 10.0 i dlatego nie można go używać do wykrywania wcześniejszych wersji ArcGIS.
Na 64-bitowym komputerze z systemem Windows 7 ten klucz rejestru może pomóc. Mam zainstalowaną wersję 10.0, która wyświetla 10.0.2414.
\ HKLM \ software \ wow6432Node \ esri \ Arcgis \ RealVersion
Wydaje się, że istnieje interfejs o nazwie IArcGISVersion z metodą getVersions , która może być tym, czego potrzebujesz.
AKTUALIZACJA
Powyżej dotyczy Javy (dzięki @ blah238) - tutaj jest link do .NET (dzięki @JasonScheirer)
Możesz również uzyskać wersję ArcGIS, sprawdzając wersję AfCore.dll. Wymaga to znajomości katalogu instalacyjnego ArcGIS, który można uzyskać, sprawdzając rejestr lub zapisując go na stałe (dla większości użytkowników jest to C: \ Program Files (x86) \ ArcGIS \ Desktop10.3 \).
/// <summary>
/// Find the version of the currently installed ArcGIS Desktop
/// </summary>
/// <returns>Version as a string in the format x.x or empty string if not found</returns>
internal string GetArcGISVersion()
{
try
{
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Path.Combine(Path.Combine(GetInstallDir(), "bin"), "AfCore.dll"));
return string.Format("{0}.{1}", fvi.FileMajorPart, fvi.FileMinorPart);
}
catch (FileNotFoundException ex)
{
Console.WriteLine(string.Format("Could not get ArcGIS version: {0}. {1}", ex.Message, ex.StackTrace));
}
return "";
}
/// <summary>
/// Look in the registry to find the install directory of ArcGIS Desktop.
/// Searches in reverse order, so latest version is returned.
/// </summary>
/// <returns>Dir name or empty string if not found</returns>
private string GetInstallDir()
{
string installDir = "";
string esriKey = @"Software\Wow6432Node\ESRI";
foreach (string subKey in GetHKLMSubKeys(esriKey).Reverse())
{
if (subKey.StartsWith("Desktop"))
{
installDir = GetRegValue(string.Format(@"HKEY_LOCAL_MACHINE\{0}\{1}", esriKey, subKey), "InstallDir");
if (!string.IsNullOrEmpty(installDir))
return installDir;
}
}
return "";
}
/// <summary>
/// Returns all the subkey names for a registry key in HKEY_LOCAL_MACHINE
/// </summary>
/// <param name="keyName">Subkey name (full path excluding HKLM)</param>
/// <returns>An array of strings or an empty array if the key is not found</returns>
private string[] GetHKLMSubKeys(string keyName)
{
using (RegistryKey tempKey = Registry.LocalMachine.OpenSubKey(keyName))
{
if (tempKey != null)
return tempKey.GetSubKeyNames();
return new string[0];
}
}
/// <summary>
/// Reads a registry key and returns the value, if found.
/// Searches both 64bit and 32bit registry keys for chosen value
/// </summary>
/// <param name="keyName">The registry key containing the value</param>
/// <param name="valueName">The name of the value</param>
/// <returns>string representation of the actual value or null if value is not found</returns>
private string GetRegValue(string keyName, string valueName)
{
object regValue = null;
regValue = Registry.GetValue(keyName, valueName, null);
if (regValue != null)
{
return regValue.ToString();
}
// try again in 32bit reg
if (keyName.Contains("HKEY_LOCAL_MACHINE"))
regValue = Registry.GetValue(keyName.Replace(@"HKEY_LOCAL_MACHINE\Software", @"HKEY_LOCAL_MACHINE\Software\Wow6432Node"), valueName, null);
else if (keyName.Contains("HKEY_CURRENT_USER"))
regValue = Registry.GetValue(keyName.Replace(@"HKEY_CURRENT_USER\Software", @"HKEY_CURRENT_USER\Software\Wow6432Node"), valueName, null);
if (regValue != null)
{
return regValue.ToString();
}
return "";
}