执行 SQLcmd 然后 return 查询结果作为 NSIS 的变量

Execute SQLcmd and then return query result as variable to NSIS

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

用户会给我实例名,这样我就可以连接到盒子了。然后我 运行 这个 sql 查询 select SERVERPROPERTY ('ProductMajorVersion') 并得到主版本号。

但是当我尝试从 NSIS 执行时,我没有成功,因为它在执行查询时出错,所以我没有从控制台获得结果 window。

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

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

    Pop [=11=]
    Pop 

我也试过:

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

    Pop [=12=]
    Pop 

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

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

TIA 安迪

应指定应用程序的完整路径,并且需要 quoted with a double quotes:

To ensure that command are executed without problems on all windows versions, is recommended to use the following syntax:

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

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