Как определить, установлено ли конкретное программное обеспечение в Windows? - PullRequest
3 голосов
/ 09 августа 2011

Я новичок в программировании. Мне дали виртуальный конференц-сайт. Теперь мне нужно изменить сайт.

Когда пользователь входит на сайт конференц-связи, он должен определить, установлено ли в его системе определенное программное обеспечение, установленное в его системе (это программное обеспечение используется для видеовызовов. Используются объекты ActiveX).

Каков наилучший метод обнаружения наличия установленного программного обеспечения в системе? (Честно говоря, я даже не знаю, какой язык лучше всего подходит для этой цели)

Ответы [ 3 ]

4 голосов
/ 09 августа 2011

Вы не можете обнаружить это, поскольку у вас нет доступа к системе.Ваше веб-приложение должно просто попытаться создать экземпляр этого ActiveX и отобразить сообщение пользователю, если это не удастся.

2 голосов
/ 09 августа 2011
    public static bool IsApplictionInstalled(string p_name)
{
    string keyName;

    // search in: CurrentUser
    keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    if (ExistsInSubKey(Registry.CurrentUser, keyName, "DisplayName", p_name) == true)
    {
        return true;
    }

    // search in: LocalMachine_32
    keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    if (ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", p_name) == true)
    {
        return true;
    }

    // search in: LocalMachine_64
    keyName = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
    if (ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", p_name) == true)
    {
        return true;
    }

    return false;
}

private static bool ExistsInSubKey(RegistryKey p_root, string p_subKeyName, string p_attributeName, string p_name)
{
    RegistryKey subkey;
    string displayName;

    using (RegistryKey key = p_root.OpenSubKey(p_subKeyName))
    {
        if (key != null)
        {
            foreach (string kn in key.GetSubKeyNames())
            {
                using (subkey = key.OpenSubKey(kn))
                {
                    displayName = subkey.GetValue(p_attributeName) as string;
                    if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}
0 голосов
/ 10 августа 2011

Спасибо всем. Но я использовал эту программу на C #. Я создал эту библиотеку классов, загрузил dll на веб-странице и использую метод IsApplicationInstalled.

public static bool IsApplicationInstalled(string p_name)
{
string displayName;
RegistryKey key;

// search in: CurrentUser
key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
foreach (String keyName in key.GetSubKeyNames())
{
    RegistryKey subkey = key.OpenSubKey(keyName);
    displayName = subkey.GetValue("DisplayName") as string;
    if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
    {
        return true;
    }
}

// search in: LocalMachine_32
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
foreach (String keyName in key.GetSubKeyNames())
{
    RegistryKey subkey = key.OpenSubKey(keyName);
    displayName = subkey.GetValue("DisplayName") as string;
    if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
    {
        return true;
    }
}

// search in: LocalMachine_64
key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall");
foreach (String keyName in key.GetSubKeyNames())
{
    RegistryKey subkey = key.OpenSubKey(keyName);
    displayName = subkey.GetValue("DisplayName") as string;
    if (p_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
    {
        return true;
    }
}
// NOT FOUND
return false;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...