C++ ShellExecuteEx не выполняет exe с параметром, не генерируя выходные данные из этого exe

За последние несколько дней или недель. В Visual Studio C++ мне трудно ShellExecuteEx() пытаясь запустить exe с параметром внутри exe. Это происходит так, что я запускаю отладочную программу в Visual Studio (даже за ее пределами). Программа запустит другую программу, и она успешно запустится, но она не генерирует вывод файла.txt. Я не был уверен, правильно ли я использовал параметр. Вот шаги, которые я пытаюсь достичь:

  1. Запустите MainTest.exe (exe, который откроет ScreenCapture.exe)
  2. Экран Cmd - MainTest.exe запущен и готовится запустить ScreenCapture.exe с помощью ShellExecuteEx
  3. UAC всплывает, запускается от имени администратора
  4. Новый экран cmd - ScreenCapture.exe запущен с параметрами и каталогами
  5. ScreenCapture.exe завершает команду и закрывает
  6. CaptureText.txt, сгенерированный ScreenCapture.exe, помещен в тот же директрой, что и ScreenCapture.exe.

Проблема в том, что я не получаю CaptureText.txt в моем каталоге или каких-либо доказательств того, что параметры работают в этой программе.

Теперь, если я запускаю ScreenCapture.exe без использования Test.exe с параметрами, он работает и создает файл.txt.

Вот код:

#include "stdafx.h"
#include <isostream>
#include <fstream>
#include <string>
#include <Windows.h>

int main()

{

    auto str = _T("C:\\Users\Engrsky\Pictures\Screenshot.png ScreenCapture -l eng")

    SHELLEXECUTEINFO shExInfo = {0};
    shExInfo.cbSize = sizeof(shExInfo);
    shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    shExInfo.hwnd = 0;
    shExInfo.lpVerb = _T("runas");                
    shExInfo.lpFile = _T("C:/Program File (x86)/Test/ScreenCapture.exe");           
    shExInfo.lpParameters = str;                  
    shExInfo.lpDirectory = 0;
    shExInfo.nShow = SW_SHOW;
    shExInfo.hInstApp = 0;  

}

ПРИМЕР: Используя только командную строку, ScreenCapture.exe отлично работает с параметром. Я ввел это так:

Администратор: Командная строка

C:\Program File (x86)\Test> ScreenCapture "C:\\Users\Engrsky\Pictures\Screenshot.png ScreenCapture -l eng"

Затем он успешно запустится и запишет выходной файл с именем ScreenCapture.txt.

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

1 ответ

Решение

Из документа MSDN для ShellExecuteEx функция, вам сначала нужно инициализировать COM. Пример, который нужно использовать:

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
Другие вопросы по тегам