.vbs文件在windows服务中无法正常工作

.vbs file not working properly from windows service

本文关键字:常工作 工作 文件 windows 服务 vbs      更新时间:2023-10-16

我在C++中创建了一个windows服务,它在特定事件上运行VBScript文件。当我在C++中的Win32应用程序中执行此操作时,这可以很好地工作,但在windows服务中的工作方式不同。

CPP文件代码:

SHELLEXECUTEINFO ExecuteInfo;
memset(&ExecuteInfo, 0, sizeof(ExecuteInfo));
ExecuteInfo.cbSize       = sizeof(ExecuteInfo);
ExecuteInfo.fMask        = 0;                
ExecuteInfo.hwnd         = 0;                
ExecuteInfo.lpVerb       = _T("open");                      // Operation to perform
ExecuteInfo.lpFile       = _T("D:\demo.vbs");  // Application name
ExecuteInfo.lpParameters = 0;           // Additional parameters
ExecuteInfo.lpDirectory  = 0;                           // Default directory
ExecuteInfo.nShow        = SW_SHOW;
ExecuteInfo.hInstApp     = 0;
if(ShellExecuteEx(&ExecuteInfo) == FALSE)
{
}

假设objShell.Windows是"Shell.Application"的一个实例,您得到的是根据msdn

ShellWindows对象:表示打开的窗口的集合属于壳牌。与此对象关联的方法可以控制并在Shell中执行命令,并获得其他与Shell相关的对象。

关键部分是that belong to the Shell。您的问题是桌面中的shell与机器中的服务所具有的shell不同。

服务在单独的会话中运行。

因此,您的脚本工作正常。它不返回任何shell窗口,因为会话中没有运行服务的人。

我创建了一个普通的exe而不是windows服务,并将其添加到windows启动注册表中。那样的话,我就能够达到预期的效果。