【问题标题】:NSIS ExecWait and the OSQL applicationNSIS ExecWait 和 OSQL 应用程序
【发布时间】:2013-01-25 22:17:54
【问题描述】:

我正在编写一个应该执行一些 MSSQL 数据库操作的安装程序。这些操作位于 .cmd 文件中,并通过 MSSQL Server 2000 中的 OSQL.exe 执行。

现在我的问题来了。当我双击批处理文件时,它执行确定。但是,如果我在我的安装程序中通过 ExecWait 运行它(或 Exec 或 ExecShell,尝试了所有,没有区别),Windows 会说找不到命令 osql... 通过 SetOutPath 设置的当前工作目录与我的目录完全相同.cmd 文件位于。

我也尝试过尽可能简化案例:

sql.cmd:

osql
pause

而在我的 NSIS 源中,我有:

Section "Perform DB operations" SEC03
  ReadEnvStr $0 SYSTEMDRIVE
  SetOutPath "$0\DBUtils"
  SetOverwrite try
  File /r "..\source_files\DBUtils\*"
  ExecWait '"$0\DBUtils\sql.cmd"'
SectionEnd

我的问题也发生在这里。通过双击或从命令行调用 .cmd 可以正常执行,但 NSIS 的 Exec 出于某种神秘的原因似乎找不到 osql。有人知道为什么会发生吗?

【问题讨论】:

    标签: sql sql-server nsis osql


    【解决方案1】:

    osql.exe 在您的硬盘中的什么位置?尝试修改您的 cmd 以使用绝对路径。

    您可以检查安装程序看到的 PATH:

    ReadEnvStr $0 PATH
    MessageBox MB_OK "PATH: $0"
    

    我不确定,但如果您的安装程序以不同的用户(管理员)运行,那么它可能有不同的路径...

    【讨论】:

    • 嗨!它位于 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\OSQL.exe 下, C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ 包含在 PATH 环境变量中。我肯定会尝试将所有内容更改为绝对路径。但是,问题是 .cmd 不是直接为我的程序执行数据库操作,而是属于第三方组件。因此,我宁愿保持第三方提供的 .cmd 文件不变。
    • 它适用于绝对路径。但是,很高兴发现它为什么不适用于相对路径。顺便说一句,我尝试将 osql 更改为一些应该在 PATH 中的 Windows 可执行文件,例如 calc 或 wordpad,它们确实有效。
    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多