Wykrywanie czy program jest zainstalowany na komputerze

Odpowiedz Nowy wątek
2019-02-08 14:07
0

Witam. Jestem początkujący w programowaniu i postanowiłem, że zrobię aplikację okienkową w Visual Studio. Jest to program startowy do jednej z moich gier, która takiego nie posiada i włącza się od razu po kliknięciu w skrót, przez co omyłkowe kliknięcie potrafi wyprowadzić z równowagi. O ile launcher udało mi się dokończyć i działa bardzo dobrze to z programem autorun pojawił się mały problem...

Chciałbym, żeby po uruchomieniu program sprawdzał w rejestrze systemowym obecność zainstalowanej gry, a następnie zwracał wartość true/false,
która następnie dałaby mi możliwość zmiany przycisku w aplikacji między "Zainstaluj grę" a "Uruchom grę".

UninstallKey to {A9307076-3B18-4FB9-AA0F-7AEA99B650B5}

Pozostało 580 znaków

2019-02-08 14:33
0

Znalazłem coś takiego ale jak już mówiłem jestem początkujący i nie wiem jak to przystosować:


public static bool IsApplictionInstalled(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;
}

Pozostało 580 znaków

2019-02-08 14:46
1

Wkleiłeś gotowe rozwiązanie. Potrzebujesz tylko "DisplayName" swojej aplikacji do przeszukiwania.

Pozostało 580 znaków

2019-02-08 14:51
0

A gdzie w tym kodzie powinienem wkleić nazwę aplikacji?

Nie nazwę, a wartość "DisplayName" Twojego klucza z rejestru - litrmleka 2019-02-08 15:06

Pozostało 580 znaków

2019-02-08 14:55
2

To jest metoda, która zwraca true jeśli aplikacja jest zainstalowana, a false jeśli nie jest (lub nie znajdzie klucza z jakiegoś innego powodu). Przykładowo jeśli pod tym kluczem, który podałeś "DisplayName" aplikacji to "Moja super aplikacja" to robisz tak:

bool isInstalled;
isInstalled = IsApplictionInstalled("Moja super aplikacja");
edytowany 1x, ostatnio: litrmleka, 2019-02-08 14:56

Pozostało 580 znaków

2019-02-08 15:49
0

Tylko jak tego użyć bo nie mam już pomysłów...

        if (IsApplictionInstalled == true)
            {
                //Wykonaj jeśli jest zainstalowana
            }

Wyrzuca błąd

IsApplictionInstalled to metoda statyczna do której musisz coś przekazać i w zamian dostaniesz wartość bool - mr-owl 2019-02-08 16:13

Pozostało 580 znaków

2019-02-08 16:37

Problem (chyba) rozwiązany....

Wystarczyło zrobić tak:
       if (IsApplictionInstalled("DisplayName aplikacji"))
            {
                MessageBox.Show("aplikacja jest zainstalowana..."); //PRZYKŁADOWY EFEKT DZIAŁANIA
            }
            else
            {
                MessageBox.Show("aplikacja NIE jest zainstalowana..."); //PRZYKŁADOWY EFEKT DZIAŁANIA
            }

Pozostało 580 znaków

2019-02-08 16:57
0

Dziękuję za pomoc autorun w pełni działa!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0