Правильный способ обнаружения SQLCMD, работающего на машине - установщик WIX - PullRequest
0 голосов
/ 10 мая 2018

Я пишу пользовательское действие, чтобы использовать предварительное условие, чтобы определить, работает ли SQLCMD на компьютере. Я могу проверить, есть ли SQLCMD на машине, используя код ниже.

В установщике мы используем CMDPrompt для работы с SQLCMD, но если на машине нет пути SQLCMD в переменных среды, он не будет работать. Но я также хотел бы знать, почему CMDprompt дает 'sqlcmd' is not recognized as an internal or external command error.

[CustomAction]
        public static ActionResult FindSqlCMD(Session session)
        {
            DebugMsg(session, "Start FindSqlCMD");
            string[] sqlVersions = session["SQLVERSIONS"].Split(';');

            List<RegistryKey> sqlKeys = new List<RegistryKey>();

            var sqlDacPaths = new string[] { "C:\\Program Files (x86)\\Microsoft SQL Server\\{0}\\DAC\\bin", "C:\\Program Files\\Microsoft SQL Server\\{0}\\DAC\\bin" };

            var sqlPackageName = "SqlPackage.exe";

            foreach (string SqlVersion in sqlVersions)
            {


                foreach (var sqlDacPath in sqlDacPaths)
                {
                    var path = string.Format(sqlDacPath, SqlVersion);



                    if (Directory.Exists(path))
                    {

                        var sqlPackagePath = Path.Combine(path, sqlPackageName);

                        if (File.Exists(sqlPackagePath))
                        {


                            session["SQLBINDIR"] = sqlPackagePath;
                            return ActionResult.Success;
                        }
                    }
                }
            }

            DebugMsg(session, string.Format("Didn't find any SQL DAC SQLPackage"));

            session.Log("End FindSqlCMD");
            return ActionResult.Success;
        }

1 Ответ

0 голосов
/ 10 мая 2018

Лучше стараться, насколько это возможно, избегать exe пользовательских действий. Возможное решение - найти sqlcmd через WiX:

 <!-- Find sqlcmd.exe path  -->
<Property Id="SQLBINDIR">
  <RegistrySearch Id="SqlBinDir11x64" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\110\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" Win64="yes" />
  <RegistrySearch Id="SqlBinDir10x64" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" Win64="yes" />
  <RegistrySearch Id="SqlBinDir90x64" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" Win64="yes" />
  <RegistrySearch Id="SqlBinDir11" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\110\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" />
  <RegistrySearch Id="SqlBinDir10" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" />
  <RegistrySearch Id="SqlBinDir90" 
                  Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup" 
                  Name="Path" 
                  Type="raw" />

</Property>

После этого вы можете запустить его

 <CustomAction Id="sqlcmd.cmd" 
              Property="sqlcmd" 
              Value="&quot;[SQLBINDIR]sqlcmd.exe&quot; -E -S $(var.serverinstance) -V 1 -i &quot;$(var.inputfile)&quot; -o &quot;$(var.outputfile)&quot;" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...