在VBScript中与Session 0进程外Excel对象进行交互

时间:2017-04-12 19:53:51

标签: excel vbscript session-0-isolation

我有一个非常简单的VBA脚本,我在Windows Server 2012上运行。它创建一个Excel对象,写入两个单元格,将工作表保存为CSV,然后关闭工作簿和应用程序,然后退出Excel宾语。

这适用于Server 2003,没有任何问题。

当我在Server 2012 R2上运行脚本时,Excel对象进程继续运行,必须通过任务管理器手动终止。

据我所知,Excel应用程序在Session-0中运行,防止对象被用户会话中运行的脚本关闭。此外,如果我更改脚本以创建文件并保存/关闭对象然后重新打开Excel文件,则无法再次写入该文件,它位于Session-0中。

当脚本运行时,它会在错误日志中创建错误:

Service Control Manager Event 2073: The Interactive Services Detection 
service terminated with the following error: Incorrect function.

脚本如下:

set fso = CreateObject("Scripting.FileSystemObject")
currDir = fso.GetParentFolderName(Wscript.ScriptFullName)

outputFile = currDir & "\ExcelTest.csv"

set objExcel = CreateObject("Excel.Application")
set ExcelWorkbook= objExcel.workbooks.add()
objExcel.application.visible = false
objExcel.application.displayalerts =false
set objExcelWorksheet = objExcel.worksheets(1)

objExcelWorksheet.Cells(1, 1).Value = "Foo"
objExcelWorksheet.Cells(1, 2).Value = "Bar"


ExcelWorkbook.saveas outputFile,23

ExcelWorkbook.close  false

objExcel.application.quit

objExcel.quit

set objExcel = nothing  

我正在寻找一种方法来强制Excel对象在用户会话中打开,或者以某种方式能够控制/访问该Excel对象。上面的代码是一个更大的脚本的简化片段,它打开和关闭多个CSV文件,因此我需要能够访问这些Excel对象。

警告:我无权更改注册表,也无法安装任何第三方应用程序。由于我们是与医疗保健相关的商店,因此安全性很紧张。

0 个答案:

没有答案