0

我正在编写一个安装程序,它应该执行一些 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。有人知道为什么会发生吗?

4

1 回答 1

0

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

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

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

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

于 2013-01-24T16:38:06.807 回答