Я создал службу Windows в C++, которая запускает файл VBScript на конкретном событии. Это отлично работает, когда я делаю это из приложения Win32 в C++, но не работает так же, как из службы 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 объекты.
Критическая часть - that belong to the Shell
. Ваша проблема в том, что оболочка на вашем рабочем столе отличается от оболочки, которую имеют службы на вашем компьютере.
Сервисы запускаются в отдельном сеансе.
Итак, ваш скрипт правильно работает. Он не возвращает окно оболочки, потому что в сеансе, где работают службы, нет никого.
Я создал обычный exe вместо службы windows и добавил, что для регистрации в Windows. Таким образом, я смог достичь желаемого.
wscript.exe
. Попробуйте запустить его с помощьюcscript.exe
.