Это может быть очень простой вопрос, но я пробовал последние 4-5 часов без успеха. :(Запустить приложение консоли C# из агента SQL Server (Job)?
У меня есть C# консольное приложение, которое просто открывает файл Excel. Это Excel файл имеет Workbook_Open() событие, которое запускает мой макрос. Мой макрос просто переименовывает sheet1 к RenameSheet1 в активном рабочем листе.
I может запустить мой проект C# из IDE.Я хочу запустить этот проект из SQL-заданий (SQL Server 2008) .Как это сделать? Пожалуйста, помогите мне получить эту работу. Спасибо.
Согласно предложениям SilverNinnjas по созданию proxy:
- Создайте учетные данные, содержащие учетную запись домена CORP \ PowerUser1 и ее пароль
CREATE CREDENTIAL PowerUser1 WITH IDENTITY = N'CORP\shress2', SECRET = N'[email protected]'
GO
USE [msdb]
GO
- Создать новый прокси-сервер под названием ExcelProxy и назначить PowerUser удостоверение к нему
EXEC msdb.dbo.sp_add_proxy
@proxy_name=N'ExcelProxy',
@credential_name=N'PowerUser1',
@enabled=1
- Грант ExcelProxy доступ к "CmdExec" подсистемы
EXEC msdb.dbo.sp_grant_proxy_to_subsystem
@proxy_name=N'ExcelProxy',
@subsystem_name =N'CmdExec'
- Грант the login testUser Разрешения использовать ExcelProxy
EXEC msdb.dbo.sp_grant_login_to_proxy
@login_name = N'shress2',
@proxy_name=N'ExcelProxy'
GO
Я все еще получаю ту же ошибку Выполнено как пользователь: CORP \ shress2.
Необработанное исключение: System.Runtime.InteropServices.COMException: Microsoft Excel не может получить доступ к файлу 'E: \ data_extracts \ RenameSheets.xlsm. Существует несколько возможных причин:
Имя файла или путь к нему не существует.
Файл используется другой программой.
Книга, которую вы пытаетесь сохранить, имеет то же имя, что и открытая книга. в Microsoft.Office.Interop.Excel.Workbooks.Open (String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad) в T_OpenExcel.Program.Main (String [] args) в C: \ Users \ shress2 \ documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ Program.cs: строка 24. Код выхода процесса -532462766. Не удалось выполнить этот шаг.
Любые причины? Я с нетерпением жду обратной связи. Большое спасибо.
@SilverNinja, вот мой C# код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
using System.Threading;
namespace T_OpenExcel
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
//Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlApp.Visible = true;
xlWorkBook = xlApp.Workbooks.Open("\\\\myserver\\data_extracts\\RenameSheets.xlsm", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlApp.DisplayAlerts = false;
xlWorkBook.SaveAs("\\\\myserver\\data_extracts\\RenameSheets.xlsm", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlWorkBook.Close(true, misValue, misValue);
xlApp.DisplayAlerts = true;
xlApp.Quit();
}
private static void RunMacro(Excel.Workbook xlWorkBook, object[] p)
{
//throw new NotImplementedException();
}
}
}
Я бы предположил, что учетная запись пользователя, который используется по умолчанию для запуска SQL Server Agent Работа не имеет достаточных прав для взаимодействия с чем-то, что имеет интерактивный графический интерфейс, как в Excel. Использование Aspose.Cells в приложении консоли может быть решением. –
Использует ли ваш проект SQL? Если нет, вам будет лучше с запланированной задачей. – jrummell
Я пробовал использовать планировщик заданий. Там прекрасно работает. Проблема в том, что мы используем SQL JOB для автоматизации процесса загрузки файла excel (в моем случае, когда приложение C# генерирует), в сторонний инструмент отчетности. Это единственная причина, по которой он запускается из задания SQL. Благодарю. – Nemo