代码之家  ›  专栏  ›  技术社区  ›  Cragly

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

  •  2
  • Cragly  · 技术社区  · 17 年前

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

    _156;系统找不到指定的文件__

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

    D:\databasebackupmanager.exe D:\databasebackups\subdit\database.bak

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

    任何人都能给这张照片投点光吗,因为谷歌没有扔掉任何有用的东西,并且开始让我发疯。

    谢谢

    3 回复  |  直到 17 年前
        1
  •  1
  •   Cade Roux    17 年前

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

    此外,就权限而言,它可能只是与代理正在运行的帐户有关的任何内容。

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

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

    如果将代理帐户临时添加到Administrators组,并且该帐户正常工作,那么这就意味着权限是没有太大帮助的_系统找不到指定_错误文件的来源。

        2
  •  1
  •   Cragly    17 年前

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

    再次感谢

        3
  •  0
  •   Ariel    17 年前

    首先,确保您的.exe是由SQL实际找到的。如果是这样,接下来我要做的就是在databasebackupmanager.exe中放置一些逻辑来收集线程在该文件上拥有的ACL(例如directorysecurity dirsec=di.getaccesscontrol(accesscontrolsections.all);)。最可能的情况是,SQL在启动进程时正在剪裁ACL。如果是这样,那么您可能需要模拟该线程以访问该文件,或者,找出该进程被授予R/W访问权限的位置,例如%temp%。