0

私はいくつかのMSSQLデータベース操作を実行する必要があるインストーラーを書いています。これらの操作は.cmdファイルにあり、MSSQLServer2000のOSQL.exeを介して実行されます。

今、私の問題が発生します。バッチファイルをダブルクリックすると、OKが実行されます。ただし、インストーラーで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を変更してみてください。

インストーラーが見るパスは次のように確認できます。

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

よくわかりませんが、インストーラーが別のユーザー(管理者)として実行されている場合は、パスが異なる可能性があります...

于 2013-01-24T16:38:06.807 に答える