Запустить исполняемый файл с параметрами при запуске в качестве сетевой службы

1

Как запустить исполняемый файл с предоставленными аргументами, если я запускаю службу сети? Я попытался использовать ShellExecuteEx из моей программы (которая работает как сетевая служба):

try
{

    DWORD dwErr;
    TCHAR bufProgName[1000] = _T("");
    TCHAR bufParameters[1000] = _T("");

    ::lstrcat(bufProgName,_T("C:\\NotMyFault\\x86\\NotMyFault.exe"));
    ::lstrcat(bufParameters,_T(" -help"));

    SHELLEXECUTEINFO ShExecInfo;
    ZeroMemory(&ShExecInfo,sizeof(ShExecInfo));
    ShExecInfo.cbSize=sizeof(ShExecInfo);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = bufProgName;        
    ShExecInfo.lpParameters = bufParameters;
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOWNORMAL;
    ShExecInfo.hInstApp = NULL; 
    int res = ShellExecuteEx(&ShExecInfo);
    if(!res)
    {
        dwErr = GetLastError();
        return -1;
    }

}
catch(...)
{
    std::cout<<"ShellFail: " << dwError;
    return -1;

}

Но все это делает запуск NotMyFault.exe, выполняемый как пользовательская сетевая служба (я вижу это из диспетчера задач), но это не помогает. То же самое для других аргументов ("-crash").

Я знаю, что это поспешно написанный код, но мне нужно выяснить, может ли процесс, выполняемый как служба сети (например, мой), сделать это успешно. Когда я запускаю его как другого пользователя (двойным щелчком по исполняемому файлу), похоже, все работает нормально.

  • 0
    Чего ты ожидаешь? Конечно, новый процесс выполняется под логином процесса создания.
  • 2
    Вы пытались использовать CreateProcess ?
Показать ещё 1 комментарий
Теги:
winapi
process

1 ответ

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

Ваша служба работает в сеансе 0. Ваш интерактивный рабочий стол находится в другом сеансе. Таким образом, вы не увидите ничего, когда ваша служба начнет процесс. Поскольку он начинается в том же сеансе, что и служба, в сеансе 0.

Если вы хотите, чтобы служба запускала процесс на интерактивном рабочем столе, это возможно, хотя и трудно: запуск интерактивного процесса из Windows Service в Windows Vista и более поздних версиях.

  • 0
    Спасибо за Ваш ответ. Что если мне не нужно взаимодействие, хотя? Например, «Notmyfault.exe -crash» не является интерактивным, когда запускается из командной строки (либо с помощью вызовов system () или ShellExecuteEx (), либо запускается из cmd напрямую. Мой процесс вызывается - я вижу это с помощью TaskMgr - это просто не запускать его с параметром (-crash или -help, -help по общему признанию интерактивен, но не должен быть -crash). Или я неправильно понимаю, что означает «интерактивный рабочий стол»?
  • 0
    Как вы определяете, получает ли другой процесс параметр?
Показать ещё 2 комментария

Ещё вопросы

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