我在C#中完成了一个包含SQL Server数据库的应用程序。
如何检查用户是否安装了SQL Server 2012 Express本地数据库?
是否可以在x86,x64上通过注册表进行检查?
基本上这个想法是如果用户没有安装SQL Server,应用程序建议安装它。
作为安装程序,我在安装程序中没有依赖SQL Server 2012 Express Local DB。
感谢。
答案 0 :(得分:3)
您必须遍历卸载GUID并找到以关键字" Microsoft SQL Server 2012"开头的GUID。你可以通过转到控制面板>找到它。节目和特征>并查看"显示名称"列。
// HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\的Windows \ CurrentVersion \卸载{guidVariable} \ DisplayName的
..应该匹配" Microsoft SQL Server 2012 *"外卡。
我没有确切的代码,但这应该让你开始。只需遍历"卸载"的所有孩子。键,然后找到" DisplayName"获得价值的关键。 " GUID"下面的变量应该是你的迭代器,因为你不知道那个值。我确定你可以获得所有GUID值的列表,这些值是"卸载"的子键。键。
string UninstallRegKeyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
Guid UninstallGuid = new Guid(GUID);
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(UninstallRegKeyPath, true))
{
if (key == null)
{
return;
}
try
{
string guidText = UninstallGuid.ToString("B");
RegistryKey child = key.OpenSubKey(guidText);
if (child != null)
{
string displayName = child.GetValue("DisplayName").ToString();
if (displayName.Contains("Microsoft SQL Server 2012"))
{
// implement logic when MSSQL 2012 is found
}
child.Close();
}
}
}
请小心谨慎。有32位安装和64位安装。 Wow6432Node包含我认为的32位程序,因此默认情况下安装在C:\Program Files (x86)\
中的所有程序(但可能在任何地方)。我还可以找到所有64位程序的其他位置,默认情况下安装在C:\Program Files\
中(并且可以安装在任何地方)。
试试这个。您可能还想替换" LocalMachine"用" CurrentUser"因为许多安装程序允许您为用户或所有用户配置它们。
using (RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
{
string searchKey = @"Microsoft SQL Server 2012";
string subKeyName = "DisplayName";
foreach (string keyname in root.GetSubKeyNames())
{
//Console.WriteLine(keyname);
using (RegistryKey key = root.OpenSubKey(keyname))
{
try // in case "DisplayName doesn't exist
{
string displayName = key.GetValue(subKeyName).ToString();
if (displayName.StartsWith(searchKey))
Console.WriteLine("GUID: " + keyname + Environment.NewLine + displayName + Environment.NewLine);
}
catch
{
}
}
}
}
Console.ReadLine();