2

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

“系统找不到指定的文件”</p>

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

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

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

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

谢谢

4

3 回答 3

1

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

再次感谢

于 2009-06-09T13:30:46.470 回答
1

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

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

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

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

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

于 2009-06-07T03:01:20.863 回答
0

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

于 2009-06-06T18:48:23.760 回答