Windows — 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.

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

0

Решение

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

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]