为了账号安全,请及时绑定邮箱和手机立即绑定

检测机器中运行的 SQLCMD 的正确方法 - WIX 安装程序先决条件

检测机器中运行的 SQLCMD 的正确方法 - WIX 安装程序先决条件

C#
冉冉说 2021-06-01 16:14:07
我正在编写一个自定义操作来使用先决条件来检测 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 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

最好尽量避免exe自定义操作。可能的解决方案是通过 WiX 查找 sqlcmd:


 <!-- 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;" />



查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信