【问题标题】:SQL Server Job - The system cannot find the file specifiedSQL Server 作业 - 系统找不到指定的文件
【发布时间】:2009-06-06 18:20:18
【问题描述】:

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

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

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

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

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

任何人都可以对此有所了解,因为谷歌没有提出任何有效的方法并且开始让我发疯。

谢谢

【问题讨论】:

  • 找不到哪个文件?可执行文件,还是数据库备份?

标签: sql-server sql-server-agent


【解决方案1】:

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

此外,就权限而言,它可以是与运行代理的帐户相关的任何内容。

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

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

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

【讨论】:

    【解决方案2】:

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

    再次感谢

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 2023-03-17
        • 2017-12-21
        • 2015-09-28
        相关资源
        最近更新 更多