আপনি আর্গজিআইএস সংস্করণটি কীভাবে প্রোগ্রামাগুলি খুঁজে পাবেন?


9

আরকিজিআইএস-এর কোন সংস্করণ কোন মেশিনে ইনস্টল করা আছে (যেমন 9.3।, 10.0, 10.1)?


বা এমনকি একটি রেজিস্ট্রি অবস্থান সহায়ক হবে। ব্যবহারকারীকে আরকজিআইএস এর কোন সংস্করণ ইনস্টল করা হয়েছে তা বের করার জন্য আমার কেবল প্রোগ্রামটির একটি উপায় প্রয়োজন। ফাইল পাথগুলি কাজ করবে না কারণ আর্কজিআইএস অ্যাপডাটা ফোল্ডারে পুরানো ফোল্ডারগুলি আনইনস্টল করছে বলে মনে হচ্ছে না
নিক

উত্তর:


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

আরকিপিতেও আপনি গেটইনস্টলআইএনফো ব্যবহার করতে পারেন ।


ডাউনভোটের কারণ?
blah238

আমি +1 দিয়েছি তাই 0 টি দেখে অবাক হয়েছি যখন আমি এখনই খুব পিছন ফিরে চেয়েছি - আমি আপনার আর্কপাই অনুস্মারকটিও পছন্দ করেছি।
পলিজিও

আইআরসি RuntimeManagerআর্কজিআইএস 10.0 এর সাথে প্রবর্তিত হয়েছিল এবং তাই পূর্ববর্তী আরকজিআইএস সংস্করণগুলি সনাক্ত করতে ব্যবহার করা যাবে না।
স্টাকেক্স

আরকিপির ক্ষেত্রেও একই রকম - এটি 10.0 এর আগের সংস্করণগুলিতে এখনও বিদ্যমান ছিল না।
স্টাকেক্স

3

একটি Win7 64 বিট পিসিতে এই রেজিস্ট্রি কীটি সহায়তা করতে পারে। আমি 10.0 ইনস্টল করেছি এবং এটি 10.0.2414 পড়ে।

\ HKLM \ SOFTWARE \ wow6432Node \ esri \ Arcgis \ RealVersion


1
যখন এটির জন্য অর্কওবজেক্টগুলি অনুপলব্ধ থাকে, তখন ইনস্টলার তৈরি করার সময় আমি এটি ব্যবহার করি।
কেলি টমাস

2
32-বিট-এ এই কীটি এইচকেএলএম \ সফটওয়্যার S ইএসআরআই G আর্কজিআইএস \ রিয়েল ভার্সন
মওয়াক্কার

@ এমওয়ালকার এছাড়াও 10.1 সহ bit৪ বিটে আমি এইচকেএলএম T সফটওয়্যার \ ইএসআরআই \ আর্কজিআইএস \ রিয়েল ভার্সনটি দেখি, আমি ভাবছি যদি এই কীটি 10.0-এ আছে?
কर्क কুইকেনডাল

@ কির্ক, 10.1-তে আমার 64-বিটের কীটি নেই - কেন অবাক হবেন না।
blah238

@ blah238 আমি 10.1 এসপি 1 পেয়েছি, ডেস্কটপ এবং সার্ভার উভয়ই ইনস্টল করা আছে। কোন ইনস্টলেশন কী তৈরি করেছে তা নিশ্চিত নয়।
কर्क কুইকেনডাল

1

একটা ইন্টারফেস নামক হবে বলে মনে হয় IArcGISVersion একটি সঙ্গে getVersions পদ্ধতি যা হতে পারে আপনার যা প্রয়োজন।

হালনাগাদ

উপরে জাভা সম্পর্কিত (ধন্যবাদ @ ব্লাহ 238) - এখানে নেট নেট লিঙ্ক (ধন্যবাদ @ জেসনশায়ার)


এটি কেবল জাভার জন্য।
blah238


0

আপনি AFCore.dll সংস্করণটি জিজ্ঞাসা করে আর্কজিআইএস সংস্করণটিও পেতে পারেন। এর জন্য আর্কজিআইএস ইনস্টল ডিরেক্টরিটি জানা দরকার যা আপনি হয় নিবন্ধগুলি অনুসন্ধান করে বা হার্ডকোডিং দ্বারা (এটি সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ আর্কজিআইএস \ ডেস্কটপ 10.3 most বেশিরভাগ ব্যবহারকারীর জন্য) পেতে পারেন।

/// <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.