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



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

用户将给我实例名称,以便我可以连接到盒子。然后我运行这个sql查询,选择服务器属性('产品主要版本'(并获取主版本号。

但是当我尝试从 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

但我只是没有得到我想要的结果,任何建议或建议将不胜感激。

或者,如果有更简单,更快捷的方式从注册表获取此信息,那也很好。

蒂亚安 迪

应用程序应使用完整路径指定,并且需要用双引号引号括起来:

为了确保在所有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:pathtosqlcmd.exe" $0'
Pop $0
Pop $1
DetailPrint $0,$1 ; $0 will be "error" if nsExec cannot start the application
SectionEnd

最新更新