프로그래밍 방식으로 ArcGIS 버전을 어떻게 찾을 수 있습니까?


9

ArcObjects.net을 사용하여 어떤 버전의 ArcGIS가 컴퓨터에 설치되어 있는지 알아볼 수 있습니까 (예 : 9.3., 10.0, 10.1)?


또는 레지스트리 위치가 도움이 될 것입니다. 프로그램이 사용자가 설치 한 ArcGIS 버전을 파악할 수있는 방법이 필요합니다. ArcGIS가 AppData 폴더의 기존 폴더를 제거하지 않는 것 같으므로 파일 경로가 작동하지 않습니다.
Nick

답변:


8

ArcObjects .NET에서 RuntimeManager를 사용하십시오. 예 :

설치된 모든 런타임 나열 :

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());
}

또는 현재 활성 런타임을 얻으려면 다음을 수행하십시오.

bool succeeded = ESRI.ArcGIS.RuntimeManager.Bind(ProductCode.EngineOrDesktop);
if (succeeded)
{
  RuntimeInfo activeRunTimeInfo = RuntimeManager.ActiveRuntime;
  System.Diagnostics.Debug.Print(activeRunTimeInfo.Product.ToString());
}

또한 arcpy에서는 GetInstallInfo 를 사용할 수 있습니다 .


공감 사유?
blah238

+1을 주었으므로 지금도 되돌아 볼 때 0을보고 놀랐습니다. 또한 ArcPy 알림도 마음에 들었습니다.
PolyGeo

IIRC RuntimeManager는 ArcGIS 10.0과 함께 도입되었으므로 이전 ArcGIS 버전을 감지하는 데 사용할 수 없습니다.
stakx

ArcPy도 마찬가지입니다. 10.0 이전 버전에는 없었습니다.
stakx

3

Win7 64 비트 PC에서이 레지스트리 키가 도움이 될 수 있습니다. 10.0이 설치되어 있으며 10.0.2414를 읽습니다.

\ HKLM \ software \ wow6432 노드 \ esri \ Arcgis \ RealVersion


1
이것은 ArcObject를 사용할 수 없을 때 유용합니다. 설치 프로그램을 만들 때 사용합니다.
켈리 토마스

2
32 비트에서이 키는 HKLM \ SOFTWARE \ ESRI \ ArcGIS \ RealVersion입니다.
mwalker

@mwalker 또한 10.1의 64 비트에서 HKLM \ SOFTWARE \ ESRI \ ArcGIS \ RealVersion을 볼 때이 키가 10.0에 있는지 궁금합니다.
Kirk Kuykendall

@ Kirk, 10.1의 64 비트에는 해당 키가 없습니다. 왜 그럴까요?
blah238

@ blah238 데스크톱과 서버가 모두 설치된 10.1 sp1이 있습니다. 어느 설치가 키를 작성했는지 확실하지 않습니다.
Kirk Kuykendall


0

AfCore.dll 버전을 쿼리하여 ArcGIS 버전을 얻을 수도 있습니다. 레지스트리를 쿼리하거나 하드 코딩하여 얻을 수있는 ArcGIS 설치 디렉토리를 알아야합니다 (대부분의 사용자는 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 "";
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.