我在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)
{
}
答案 0 :(得分:0)
假设objShell.Windows是“Shell.Application”的一个实例,你得到的是msdn
ShellWindows对象:表示打开的窗口的集合 属于壳牌。与此对象关联的方法可以控制 并在Shell中执行命令,并获取其他与Shell相关的命令 对象。
关键部分是that belong to the Shell
。您的问题是桌面上的shell与计算机中的服务所具有的shell不同。
服务在单独的会话中运行。
因此,您的脚本正常工作。它不会返回任何shell窗口,因为会话中没有人正在运行服务。
答案 1 :(得分:0)
我创建了一个普通的exe而不是windows服务,并将其添加到windows startup registory。 这样我就能达到预期目的。