我正在创建一个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 安迪
答案 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