SQL作业无法运行C#.net控制台应用程序

我有一个简单的Excel文件,具有以下代码:

Private Sub Workbook_Open() MsgBox "Hello World!" End Sub 

我试图运行一个SQL工作来打开这个Excel文件,但它失败了,变得没有反应。 在谷歌search,我发现原因'为什么'SQL作业不会打开Excel文件作业在Sql Server代理不完成,但它在BIDS?

所以我想在C#中创build一个简单的控制台应用程序,只需打开Excel文件并运行我的macros。 这是我的代码

 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(); xlWorkBook = xlApp.Workbooks.Open(@"E:\data_extracts\TestHelloWorld.xlsm", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); RunMacro(xlWorkBook, new Object[] { "TestHello" }); Thread.Sleep(5000); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); } private static void RunMacro(Excel.Workbook xlWorkBook, object[] p) { //throw new NotImplementedException(); } } } 

我可以在IDE中成功运行此代码。 现在我想从SSMS中的SQL作业,sql server 2008中运行这个。

我从C#项目中抓取了T_OpenExcel.exe文件(T_OpenExcel – > bin – > Debug – > T_OpenExcel.exe)。 我创build了一个SQL Job.Here是我的一些细节:

步骤名称:OpenHelloWorldExceltypes:操作系统(CmdExec)运行方式:SQL Server代理服务帐户命令:C:\ Users \ shress2 \ Documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ bin \ Debug \ T_OpenExcel.exe

在运行这个工作时,我得到以下状态开始工作'TestHelloWorld'状态成功执行工作'TestHelloWorld'状态错误

在查看历史logging时,显示:消息以用户身份执行:GSOPS4 \ SYSTEM。 未处理的exception:System.Runtime.InteropServices.COMException:Microsoft Excel无法访问文件'E:\ data_extracts \ TestHelloWorld.xlsm'。 有几个可能的原因:
文件名或path不存在。 该文件正在被另一个程序使用。 您尝试保存的工作簿与当前打开的工作簿具有相同的名称。 在Microsoft.Office.Interop.Excel.Workbooks.Open(string文件名,对象更新链接,对象ReadOnly,对象格式,对象密码,对象WriteResPassword,对象IgnoreReadOnlyRecommended,对象源,对象分隔符,对象可编辑,对象通知,对象转换器,对象C:\ Users \ shress2 \ documents \ visual studio 2010 \ projects \ T_OpenExcel \ T_OpenExcel \ Program.cs中的T_OpenExcel.Program.Main(String [] args)中的AddToMru,Object Local,Object CorruptLoad) -532462766。 该步骤失败。

我检查了E:\ data_extracts \ TestHelloWorld.xlsm目录,发现它工作。 我确保我的xlsm文件没有被任何人使用。 我无法弄清楚为什么它没有运行它。 任何帮助是极大的赞赏。 谢谢!

问题似乎是,当您打开Excel文件时试图显示一个消息框,但是您正在自动执行该消息,因此没有人可以单击消息框上的button。 其余的代码不能执行,因为文件正坐在那里等待有人点击button。

在后续运行中,服务器无法访问它,因为它仍然在那里,对普通用户不可见,等待button被点击。 因此错误。

简短版本:不要在无人值守的应用程序中预先input用户input。