4

データベースのリビジョン管理 (および自動インストール) 手順の一環として、ASP ページ内からさまざまな .sql ファイルに対して sqlcmd.exe を実行できる必要があります。これを行うために使用しているコードは次のとおりです。

Dim cmd : cmd = "sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
Dim wshShell : Set wshShell = Server.CreateObject("WScript.Shell")
Dim return : return = wshShell.Run(cmd, 0, True)

開発マシン (XP を実行) でコードを動作させていますが、Windows 2003 サーバーに展開したところ、問題が発生しました。問題は、戻り値が常に 1 であるということです。これは、バッチ ファイルまたはその他の考えられるものを実行しようとした場合にも発生します (cmd の値を存在しないファイルに変更すると、爆破されます)。私の予想通り)

I_USR と I_WAM を追加して、sqlcmd.exe と cmd.exe の両方に実行権限を持たせようとしましたが、それでも 1 が返されます。サーバーでコマンド プロンプトを開いて "runas /user:servername\i_usr sqlcmd.exe " 正常に動作しますが、ASP ページからの実行はまだ動作しません。

また、.sql スクリプトを手動で実行すると、すべてがスムーズに実行されるため、問題はありません。

サーバー上に、IIS または Windows 内で一般的に変更するのを忘れたセキュリティ設定はありますか?

事前にインターネットに感謝します。

4

2 に答える 2

2

この問題は、最初の行を次のように変更することで解決されました。

Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
于 2009-10-26T14:46:58.920 に答える
1

あなたは変わるべきです

cmd = "sqlcmd -S ...

cmd = "\windows\sqlcmd.exe -S ..

(または、sqlcmd.exe へのフル パスにスペースが含まれていないもの)

パスの問題を除外するためだけに。

于 2009-03-30T23:06:33.090 に答える