我可以更改C#脚本中的某些内容以避免在DCOM设置中使用交互式用户吗?

我可以更改C#脚本中的某些内容以避免在DCOM设置中使用交互式用户吗?,c#,sql-server,excel,ssis,C#,Sql Server,Excel,Ssis,我有一个ssis包,它将模板复制到文件夹中,并使用文件系统任务相应地命名它。然后在我的数据流任务中,我从查询中提取数据并写入刚刚创建的excel文件。这与“启动用户”Excel应用程序DCOM设置配合得很好。然后我有一个脚本任务重新格式化原始excel文件中的数据类型。但是,除非我将DCOM配置设置为使用“交互式用户”,否则该作业在脚本任务中失败。问题是,即使我的用户帐户已登录,它也无法工作,除非我主动将rdp导入服务器并在我的计算机上打开该窗口。是否有一种变通方法可以包含在代码或其他地方,以避

我有一个ssis包,它将模板复制到文件夹中,并使用文件系统任务相应地命名它。然后在我的数据流任务中,我从查询中提取数据并写入刚刚创建的excel文件。这与“启动用户”Excel应用程序DCOM设置配合得很好。然后我有一个脚本任务重新格式化原始excel文件中的数据类型。但是,除非我将DCOM配置设置为使用“交互式用户”,否则该作业在脚本任务中失败。问题是,即使我的用户帐户已登录,它也无法工作,除非我主动将rdp导入服务器并在我的计算机上打开该窗口。是否有一种变通方法可以包含在代码或其他地方,以避免使用交互式用户设置?这是我的剧本:

public void Main()
        {
            string datetime = DateTime.Now.ToString("yyyyMMddHHmm");
            try
            {
                string FileName = Dts.Variables["User::FullDestinationFile"].Value.ToString();

                //Init

                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                xlApp.Visible = false;

                //Set active worksheet

                Workbook xlWorkbook = xlApp.Workbooks.Open(FileName);
                Sheets xlSheets = xlWorkbook.Worksheets;
                Worksheet sheet = (Worksheet)xlApp.Worksheets[1];
                sheet.Select(Type.Missing);

                //Set formatting on columns

                Range pDate = sheet.Range[sheet.Cells[5, 1], sheet.Cells[sheet.UsedRange.Rows.Count, 1]];
                pDate.NumberFormat = "General";
                pDate.HorizontalAlignment = XlHAlign.xlHAlignCenter;


                //Save and Close
                xlWorkbook.Save();
                xlWorkbook.Close(true);

                Dts.TaskResult = (int)ScriptResults.Success;
            }

            catch (Exception exception)
            {

                // Create Log File for Errors
                using (StreamWriter sw = File.CreateText(Dts.Variables["User::FullDestinationFile"].Value.ToString() + datetime + ".log"))
                {
                    sw.WriteLine(exception.ToString());
                    Dts.TaskResult = (int)ScriptResults.Failure;

                }

            }

        }

我看到了您的问题,正如您所经历的,将互操作Excel bits与SSIS一起使用是一件痛苦的事情。我可以用两种方法来减少这种情况。1) 将Excel提取部分修改为SSRS报告,假设它安装在您的生态系统中,可以优雅地导出到Excel。不再需要Office和支付SQL Server box上的许可证费用,同时由于修补而增加了停机时间。然后,SSIS部分就变成了一个问题,即用一个好的文件名保存导出—更易于管理,并且有很多示例—另一种方法可能是使用类似的方法。是的,一开始会有很多返工,但它应该可以避免您遇到的交互性挑战,正如我上次回忆的那样,它实际上只是编写Excel格式的XML。互操作库正在旋转一个Excel实例来完成所有巫毒,它们做得很好,或者很普通