C# 在Windows服务中使用VBScript写入Excel

C# 在Windows服务中使用VBScript写入Excel,c#,vba,excel,vbscript,C#,Vba,Excel,Vbscript,我正在尝试使用Windows服务启动名为sample.vbs的VBScript,但无法执行此操作。当我打开任务管理器时,我可以看到基于Microsoft®Windows的脚本主机已打开,Excel已打开,但仅此而已,之后什么也不会发生 当我对控制台应用程序执行同样的操作时,一切工作都完美无瑕 这是我的vbs文件: SET objExcelApp = CREATEOBJECT("Excel.Application") WITH objExcelApp .DefaultSaveFormat

我正在尝试使用Windows服务启动名为
sample.vbs
的VBScript,但无法执行此操作。当我打开任务管理器时,我可以看到基于Microsoft®Windows的脚本主机已打开,Excel已打开,但仅此而已,之后什么也不会发生

当我对控制台应用程序执行同样的操作时,一切工作都完美无瑕

这是我的vbs文件:

SET objExcelApp = CREATEOBJECT("Excel.Application")
WITH objExcelApp
    .DefaultSaveFormat = xlWorkbookNormal
    .DisplayAlerts = FALSE
    .Workbooks.Open "C:\SoftwareARGE\data.xlsx"
    .DisplayFullScreen = FALSE
    .Visible = FALSE
END WITH
SET objExcelSheet = objExcelApp.Worksheets(1)
objExcelSheet.Cells(1 , 1) = "some data"
objExcelSheet.SaveAs strExcelAppenFile
objExcelApp.Application.Quit
下面是我如何从C#调用vbs:

System.Diagnostics.ProcessStartInfo=
新系统.Diagnostics.ProcessStartInfo(“cmd”,“/c sample.vbs”)
{
重定向标准输出=真,
WorkingDirectory=“some path”,//实际上它就像C:\。。
UseShellExecute=false,
CreateNoWindow=true
};
System.Diagnostics.Process proc=新的System.Diagnostics.Process()
{
StartInfo=procStartInfo
};
proc.Start();

进程WaitForExit();//您是否在vbs中为xlWorkbookNormal声明了contant变量?显然,它不知道这意味着什么。不,我不知道,但我不认为这是问题所在,因为vbs文件可以从控制台应用程序中工作,但不能从windows服务中工作。我很惊讶,如果您不为
xlWorkbookNormal
设置值,它就可以工作。如果要添加
选项Explicit
(这是个好主意),它将失败。为什么不直接用C语言编写代码呢?或者只是作为计划任务调用VBS?我应该从windows服务调用VBS。因为这个项目有一个客户端,客户可以管理任务的时间等。我不明白你说的那部分,把代码直接放在C中,它已经在C中了?我的意思是:把你写的所有VBS代码,转换成C,然后放进你的C程序。现在,您只需要支持一种语言。或者,如果您必须继续使用VBS,并且需要允许用户修改日程安排等内容,请使用windows计划程序。不要去写服务。既然你已经可以写服务了,为什么还要写服务呢?
System.Diagnostics.ProcessStartInfo = 
new System.Diagnostics.ProcessStartInfo("cmd", "/c sample.vbs")
{

      RedirectStandardOutput = true,
      WorkingDirectory = "some path", //actually it's like C:\..

      UseShellExecute = false,

      CreateNoWindow = true
};

System.Diagnostics.Process proc = new System.Diagnostics.Process()
{
      StartInfo = procStartInfo
};
proc.Start();

proc.WaitForExit();// <---- Can't move forward in Windows Service