SQL Server作业 - 系统找不到指定的文件

时间:2009-06-06 18:20:18

标签: sql-server sql-server-agent

我正在运行一个SQL Server代理程序作业,它会压缩我的数据库备份。我运行的应用程序是一个C#Windows应用程序,它将数据库的路径作为参数。当我从命令提示符运行应用程序时,一切正常。但是当我使用操作系统(CmdExec)作为类型从sql server作业中运行它时,我得到以下错误。

“系统找不到指定的文件”

在作业中,我有以下命令:

D:\ DatabaseBackups \ DatabaseBackupManager.exe D:\ DatabaseBackups \ SubDit \ Database.bak

我已尝试在DatabaseBackups文件夹上为SQL Server代理帐户设置特定的目录权限,但仍会收到相同的错误。

任何人都可以对这一点嗤之以鼻,因为谷歌没有抛出任何有效的东西,并且开始让我发疯。

由于

3 个答案:

答案 0 :(得分:1)

D:驱动器必须作为本地驱动器存在,而不是映射驱动器。 (除非有某种方法强制将其映射到未登录的其他用户,我不知道)

此外,就权限而言,它可能与运行代理的帐户有关。

您可能需要在C#进程中进行一些日志记录,假设它正在启动您的进程。如果它没有启动您的进程,则可能是该目录的某些权限与该目录甚至.NET框架设置有关。

此外,您可以使用Windows来审核失败,以查看它正在尝试打开哪个文件。

如果您将代理帐户临时添加到管理员组并且它可以正常工作,那么这表明权限是非常有用的“系统无法找到指定文件”错误的来源。

答案 1 :(得分:1)

感谢您的帮助。我尝试了你建议的所有内容,发现它正在查找我用来压缩备份的7za.exe的C:\ Windows \ System32文件夹。我引用了exe,好像它是从运行我的应用程序的同一目录中调用的。

再次感谢

答案 2 :(得分:0)

首先,确保SQL实际找到您的.exe。如果是这样,接下来我要做的是在DatabaseBackupManager.exe中放入一些逻辑来收集线程对该文件的ACL(例如DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);)。最有可能的是,SQL在启动进程时正在修剪ACL。如果是这样,那么您可能需要模拟该线程以访问该文件,或者,找出该进程被授予的权限。 %TEMP%。