Using this answer as a basis:
// Dicionario que contem os prerequisitos necessarios. Por cada prerequisito,
// contem uma flag que indica se foi encontrado. No fim da pesquisa, se foram todos
// encontrados, retorna verdadeiro. Caso contrario retorna falso.
Dictionary<string, bool> preRequisitosEncontrados = new Dictionary<string, bool>
{
{ "Adobe Flash Player", false },
// ... outros componentes que necessite.
};
List<string> preRequisitos = preRequisitosEncontrados.Keys.ToList();
const string caminhoRegistro = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey chave = Registry.LocalMachine.OpenSubKey(caminhoRegistro))
{
if (chave != null)
{
foreach (string subChaves in chave.GetSubKeyNames())
{
using (RegistryKey subChave = chave.OpenSubKey(subChaves))
{
if (subChave == null)
continue;
var name = subChave.GetValue("DisplayName") as string;
if(string.IsNullOrWhiteSpace(name))
continue;
var index = preRequisitos.FindIndex(s => name.Contains(s));
if (index == -1)
continue;
// Se encontrou um prerequisito, remove-o da lista e marco-o como encontrado.
preRequisitosEncontrados[preRequisitos[index]] = true;
preRequisitos.RemoveAt(index);
}
}
}
}
bool todosEncontrados = preRequisitosEncontrados.All(p => p.Value);
This code searches the programs installed by the defined prerequisites. If you find them all, todosEncontrados
is true. If something is missing, todosEncontrados
and false.
You can run this code every time you start your application, and if it fails, for example, to show the user a message with missing components. Or you can run only the first time the application starts and save the search result in Settings
:
if (!Settings.Default.PrerequisitosCumpridos)
{
var cumpridos = AnalisarPrerequitos();
if (cumpridos)
{
Settings.Default.PrerequisitosCumpridos = true;
Settings.Default.Save();
}
else
{
// informa o utilizador
}
}