执行SQLcmd,然后将查询结果作为变量返回给NSIS

时间:2018-03-12 16:55:08

标签: nsis sqlcmd

我正在创建一个NSIS安装程序,我需要获取用户已安装的SQL Server版本。

用户将为我提供实例名称,以便我可以连接到该框。然后我运行这个sql查询选择SERVERPROPERTY('ProductMajorVersion')并获取主版本号。

但是当我尝试做的是来自NSIS时,我没有成功,因为它在执行查询时出错,所以我没有从控制台窗口得到结果。

以下是我在NSIS文件中的内容:

nsExec::ExecToStack "'sqlcmd -S $SQL_Instance_Name -E -h-1 -Q $\"SET NOCOUNT ON; select SERVERPROPERTY ($\'ProductMajorVersion$\')$\"'"

    Pop $0
    Pop $1

我也尝试过:

ExecCmd::Exec  "'sqlcmd -S $SQL_Instance_Name -E -h-1 -Q $\"SET NOCOUNT ON; 
select SERVERPROPERTY ($\'ProductMajorVersion$\')$\"'"

    Pop $0
    Pop $1

但我只是没有得到我想要的结果,任何建议或建议都会受到赞赏。

或者,如果有更容易和更快捷的方式从注册表获取此信息,那么也可以。

TIA 安迪

1 个答案:

答案 0 :(得分:0)

应该使用完整路径指定应用程序,它必须是quoted with a double quotes

  

要确保在所有Windows版本上执行命令没有问题,   建议使用以下语法:

     

nsExec::ExecToStack [OPTIONS] '"PATH" param1 param2 paramN'

Section
StrCpy $0 "-S $SQL_Instance_Name ....." ; Putting the parameters here makes them easier to debug etc
MessageBox mb_ok $0 ; Use this to make sure the parameters look correct
nsExec::ExecToStack '"c:\path\to\sqlcmd.exe" $0'
Pop $0
Pop $1
DetailPrint $0,$1 ; $0 will be "error" if nsExec cannot start the application
SectionEnd