Sql server 从存储过程运行exe文件失败,而手动运行成功

Sql server 从存储过程运行exe文件失败,而手动运行成功,sql-server,security,stored-procedures,batch-file,Sql Server,Security,Stored Procedures,Batch File,我使用SQLServer2008。目前,我正在开发一个需要打印文件的存储过程 问题:我在sp中创建的文本文件需要以横向方式打印。我使用DOSPrinter.exe程序,它是一个universel打印机驱动程序,可从命令行向(默认)打印机提示添加一个文件 我使用xp\u cmdshell来实现这一点。我想xp_cmdshell有足够的权限。我用它来执行一些文件复制操作,在我对使用过的目录设置了安全性之后,它就可以完美地工作了 我给了DOSPrinter与打印设备相同的权限 但是,在命令窗口中手动键

我使用SQLServer2008。目前,我正在开发一个需要打印文件的存储过程

问题:我在sp中创建的文本文件需要以横向方式打印。我使用DOSPrinter.exe程序,它是一个universel打印机驱动程序,可从命令行向(默认)打印机提示添加一个文件

我使用xp\u 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

确保该功能已启用:

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

如果是,您可以发布命令发送给您的输出吗?如果您尝试运行
dir**
,会发生什么情况?

您是否尝试在SSMS窗口而不是命令窗口中运行该命令?我认为问题不在于存储过程本身。我认为问题在于SQL Server访问可执行文件和/或文件

现在,一个愚蠢的问题。您是否在运行SSMS的同一台计算机上运行SQL Server?如果不是,问题很简单。该命令位于本地计算机上,但不在服务器计算机上

如果您在同一台计算机上运行所有程序,并且您知道xp_cmdshell正在工作,那么问题就会变得更严重。这可能是权限委派问题。可能是运行SQL Server代理的用户没有查看临时文件的权限。或者可能还有其他原因


祝你好运。

我有一个周末来考虑这个问题,答案实际上比我想象的要简单

关键是通用打印机驱动程序将文本文档发送到默认打印机,正如我所指出的。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
当我运行存储过程时,文件确实会显示在打印提示中

各位,谢谢你们的回答:-)