.vbs файл не работает должным образом из службы Windows

0

Я создал службу 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)
{
}
  • 0
    По умолчанию VBScripts запускается с интерпретатором «GUI» wscript.exe . Попробуйте запустить его с помощью cscript.exe .
  • 0
    Что "не работает так же" означает точно?
Показать ещё 1 комментарий
Теги:
windows-services
vbscript

2 ответа

0
Лучший ответ

Предполагая, что objShell.Windows является экземпляром "Shell.Application", то, что вы получаете, соответствует msdn

Объект ShellWindows: представляет коллекцию открытых окон, принадлежащих командной оболочке. Методы, связанные с этими объектами, могут управлять и выполнять команды внутри оболочки и получать другие связанные с Shell объекты.

Критическая часть - that belong to the Shell. Ваша проблема в том, что оболочка на вашем рабочем столе отличается от оболочки, которую имеют службы на вашем компьютере.

Сервисы запускаются в отдельном сеансе.

Итак, ваш скрипт правильно работает. Он не возвращает окно оболочки, потому что в сеансе, где работают службы, нет никого.

  • 0
    так как я могу это сделать? я хочу получить открытые окна пользовательской оболочки из сервиса? есть ли способ сделать это?
  • 0
    Короче НЕТ. Вы можете сделать это (см. Здесь ), но правильный способ сделать это - обнаружить вход пользователя в систему и запустить вспомогательную программу, запущенную в сеансе пользователя, и реализовать способ взаимодействия вспомогательной программы и службы. здесь и здесь вы найдете как (извините, код C / C ++ / C #)
0

Я создал обычный exe вместо службы windows и добавил, что для регистрации в Windows. Таким образом, я смог достичь желаемого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню