Задание SQL Server - система не может найти указанный файл - PullRequest
2 голосов
/ 06 июня 2009

Я выполняю задание агента SQL Server, которое архивирует мои резервные копии базы данных. Приложение, которое я запускаю, является приложением C # Windows, которое принимает путь к базе данных в качестве аргумента. Когда я запускаю форму приложения из командной строки, все работает хорошо. Однако, когда я запускаю его из задания сервера SQL с использованием операционной системы (CmdExec) в качестве типа, я получаю следующую ошибку.

«Системе не удается найти указанный файл»

В работе у меня есть следующая команда:

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

Я попытался установить определенные разрешения для каталога для учетной записи агента SQL Server в папке DatabaseBackups, но все равно получаю ту же ошибку.

Кто-нибудь может пролить свет на этот, так как Google не подбрасывает ничего, что работает и начинает сводить меня с ума.

Спасибо

Ответы [ 3 ]

1 голос
/ 07 июня 2009

Диск D: должен существовать как локальный диск, а не как подключенный диск. (Если нет какого-либо способа заставить это быть сопоставленным для других пользователей, которые не вошли в систему, о которых я не знаю)

Кроме того, что касается разрешений, это может быть что угодно, относящееся к учетной записи, под которой работает агент.

Возможно, вам потребуется выполнить вход в процесс C #, предполагая, что он вообще запускает ваш процесс. Если он не запускает ваш процесс, это может быть некоторые разрешения для этой учетной записи, связанные с каталогом или даже настройки .NET Framework.

Кроме того, вы можете использовать Windows для аудита сбоев, чтобы увидеть, какой файл он пытается открыть.

Если вы временно добавляете учетную запись агента в группу администраторов, и она работает, то это указывает на то, что разрешения являются источником не очень полезной ошибки «Система не может найти указанный файл».

1 голос
/ 09 июня 2009

Спасибо за вашу помощь, ребята. Я перепробовал все, что вы предложили, и обнаружил, что он ищет в папке C: \ Windows \ System32 файл 7za.exe, который я использовал для архивирования моих резервных копий. Я ссылался на исполняемый файл, как если бы он вызывался из того же каталога, в котором выполнялось мое приложение.

Еще раз спасибо

0 голосов
/ 06 июня 2009

Во-первых, убедитесь, что ваш .exe действительно найден SQL. Если это так, то следующее, что я хотел бы сделать, это поместить некоторую логику в DatabaseBackupManager.exe, чтобы собрать списки ACL, которые есть у потока в этом файле (например, DirectorySecurity DirSec = di.GetAccessControl (AccessControlSections.All);). Скорее всего, SQL обрезает ACL при запуске вашего процесса. Если это так, то вам может потребоваться выдать себя за этот поток, чтобы получить доступ к этому файлу, или, в качестве альтернативы, выяснить, где этому процессу предоставляется прямой доступ, например, к файлу. % Temp%.

...