1

私はSQLServer2008を使用しています。現在、ファイルを印刷する必要があるストアドプロシージャに取り組んでいます。

問題:spで作成したテキストファイルを横向きで印刷する必要があります。コマンドラインから(デフォルトの)プリンターキューにファイルを追加するユニバースプリンタードライバーであるプログラムDOSPrinter.exeを使用します。

これを行うにはxp_cmdshellを使用します。xp_cmdshellには、私が推測する十分な権限があります。私はそれを使用していくつかのファイルコピーアクションを実行し、使用するディレクトリにセキュリティを設定した後、それは完全に機能します。

私はDOSPrinterに、印刷デバイスと一緒に同じ権利を与えました。

ただし、コマンドウィンドウでコマンドを手動で入力すると(C:\ temp \ DOSPrinter "C:\ temp \ test.txt")、ファイルは印刷キューに表示されます。同じコマンドをbatファイルに入れ、cmdウィンドウから手動でbatファイルを呼び出すと、ファイルは印刷キューに送信されます。

コマンドをストアドプロシージャに配置しようとすると、次のようになります。

    SET @bcpCommand = 'C:\temp\DOSPrinter.exe C:\temp\test.txt'
    EXEC master..xp_cmdshell @bcpCommand

ファイルはプリントキューに送信されません。spからbatファイルを呼び出そうとすると、印刷キューにファイルがありません。私はちょっと必死です。

多分誰かが私にどのように進めるかについてのいくつかのアイデアを与えるのを手伝ってくれるでしょうか?

ありがとう、

jan_solo

4

3 に答える 3

0

私はそれについて考える週末を過ごしましたが、答えは実際には予想よりも簡単でした...

要点は、前述したように、ユニバーサル プリンター ドライバーがテキスト ドキュメントを既定のプリンターに送信することです。XP_cmdshell は、ログオンしたユーザーとは別のユーザーで実行されます。

私がしなければならなかった唯一のことは、ファイルを印刷する前に XP_cmdshell でデフォルトのプリンターを追加することでした:

    SET @bcpCommand = 'rundll32 printui.dll,PrintUIEntry /y /q /n "My_Printer"'
    EXEC master..xp_cmdshell @bcpCommand

    SET @bcpCommand = 'C:\temp\DOSPrinter.exe C:\temp\test.txt'
    EXEC master..xp_cmdshell @bcpCommand

ストアド プロシージャを実行すると、ファイルが印刷キューに表示されます。

みなさん、とにかく答えてくれてありがとう:-)

于 2013-01-07T09:00:25.370 に答える
0

機能が有効になっていることを確認します。

exec sp_configure ‘show advanced options’, 1
go
reconfigure
go
exec sp_configure ‘xp_cmdshell’, 1
go
reconfigure
go

そうである場合、コマンドが送信する出力を投稿できますか? 実行しようとするとどうなりますdir *.*か?

于 2013-01-04T16:00:04.770 に答える
0

コマンド ウィンドウではなく、SSMS ウィンドウでコマンドを実行してみましたか? 問題はストアドプロシージャ自体ではないと思います。問題は、SQL Server が実行可能ファイルやファイルにアクセスしていることだと思います。

さて、ばかげた質問です。SSMS を実行しているのと同じマシンで SQL Server を実行していますか? そうでない場合、問題は単純です。コマンドはローカル マシンにありますが、サーバー マシンにはありません。

すべてを同じマシンで実行していて、xp_cmdshell が機能していることがわかっている場合、問題はさらに難しくなります。権限の委任の問題である可能性があります。SQL Server エージェントを実行しているユーザーに、一時ファイルを参照する権限がない可能性があります。あるいは他に原因があるかもしれません。

幸運を。

于 2013-01-04T16:12:55.123 に答える