2013-03-18 2 views
2

Я ищу способ определения в WiX, если SQLLocalDB установлен или нет. Как я могу это сделать? - Могу ли я проверить ключ реестра? - Когда да, какой ключ?Определите, установлен ли SqlLocalDB

+0

http://msdn.microsoft.com/en-us/library/hh215237.aspx – ErikEJ

+0

Лично я предпочитаю чтобы проверить подключение к экземпляру базы данных, а затем связать себя с конкретным экземпляром/версией. –

+0

@christopher painter - как я могу сделать это в WiX, чтобы решить установить LocalDB или нет? – BennoDual

ответ

4

RegistrySearch должен это сделать:

<Property Id="LOCALDB"> 
    <RegistrySearch Id="SearchForLocalDB" Root="HKLM" 
        Key="SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer\CurrentVersion" 
        Name="CurrentVersion" 
        Type="raw" /> 
</Property> 

Что бы получить вам версию.

+0

В MSDN, свойства AppSearch должны быть общедоступными. http://msdn.microsoft.com/en-us/library/windows/desktop/aa367579%28v=vs.85%29.aspx и предупреждение ICE52. –

+0

Да, слишком много времени в Bundles. :) Исправлена. –

0

Проверка в реестре может не работать постоянно, если пользователь удаляет localDb, тогда записи реестра все еще могут существовать.

Вот функция, я использую, чтобы определить установку LocalDB из командной строки -

internal static bool IsLocalDBInstalled() 
    { 
     // Start the child process. 
     Process p = new Process(); 
     // Redirect the output stream of the child process. 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.FileName = "cmd.exe"; 
     p.StartInfo.Arguments = "/C sqllocaldb info"; 
     p.StartInfo.CreateNoWindow = true; 
     p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     p.Start(); 
     // Do not wait for the child process to exit before 
     // reading to the end of its redirected stream. 
     // p.WaitForExit(); 
     // Read the output stream first and then wait. 
     string sOutput = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 

     //If LocalDb is not installed then it will return that 'sqllocaldb' is not recognized as an internal or external command operable program or batch file. 
     if (sOutput == null || sOutput.Trim().Length == 0 || sOutput.Contains("not recognized")) 
      return false; 
     if (sOutput.ToLower().Contains("mssqllocaldb")) //This is a defualt instance in local DB 
      return true; 
     return false; 
    } 
Смежные вопросы