我正在完成包含SQL Server數據庫的C#中的應用程序。檢查SQL Server是否已安裝C#
如何檢查用戶是否安裝了SQL Server 2012 Express Local DB?
是否可以通過x86,x64上的註冊表進行檢查?
基本上這個想法是,如果用戶沒有安裝SQL Server,應用程序建議安裝它。
由於我正在安裝的安裝程序沒有SQL Server 2012 Express Local DB的依賴項。
謝謝。
我正在完成包含SQL Server數據庫的C#中的應用程序。檢查SQL Server是否已安裝C#
如何檢查用戶是否安裝了SQL Server 2012 Express Local DB?
是否可以通過x86,x64上的註冊表進行檢查?
基本上這個想法是,如果用戶沒有安裝SQL Server,應用程序建議安裝它。
由於我正在安裝的安裝程序沒有SQL Server 2012 Express Local DB的依賴項。
謝謝。
您必須遍歷卸載GUID並找到一個以關鍵字「Microsoft SQL Server 2012」開頭的GUID。您可以通過控制面板>程序和功能>找到它並查看「顯示名稱」列。
// HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \卸載{guidVariable} \ DisplayName的
..應該通配符匹配 「2012 *的Microsoft SQL Server」。
我沒有確切的代碼,但這應該讓你開始。只需循環「Uninstall」鍵的所有子項,然後通過獲取該值來查找「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\
(並且可能安裝在任何地方)。
試試這個。您可能還想用「CurrentUser」替換「LocalMachine」,因爲許多安裝程序允許您爲您的用戶或所有用戶配置它們。
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();
醜陋地獄,但最好的辦法可能。尼斯 - 將不得不記住;) – TomTom
謝謝,會試試這個。 –
的[檢查是否是通過C#安裝在計算機上的SQL Server]可能的複製(http://stackoverflow.com/questions/2443001/check-if-sql-server-is-installed-on-a - 機器通過c-sharp) –
已經嘗試過,沒有工作。該應用程序是32位和OS 64位。 –
不是直接的答案,但是將存儲的應用程序數據替換爲SQLite會不會更好? – trailmax