检查 .NET Windows 窗体应用程序的先决条件
本文关键字:先决条件 应用程序 窗体 NET Windows 检查 | 更新日期: 2023-09-27 18:17:08
我想在安装.NET Windows Form application
或打开时检查第三方应用程序的安装。 我的 Windows 窗体应用程序不需要第三方应用程序运行,但它确实需要它才能使功能正常工作。 例如,"我的 Windows 窗体"应用程序打开第三方应用程序,如邮件程序。
我不知道Click Once
是否是正确的策略?我需要它在安装过程中检查先决条件,如果没有,请通知用户先安装它。如果Click Once
不是正确的策略,还有另一种方法吗? 也许我需要先安装我的 Windows 表单应用程序,然后在打开它时检查第三方应用程序? 问题是,安装路径可能因机器而异。 我真的不确定该怎么做。
此链接解释了如何在单击一次中包含先决条件,但这不是我想要做的。
另一个链接,讨论包括先决条件,而不仅仅是检测它们。
一种可能的解决方案是使用此方法检查注册表,该方法返回 bool 值,指示具有应用程序名称的注册表记录是否存在:
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;
}