C++ ShellExecuteEx не выполняет exe с параметром, не генерируя выходные данные из этого exe
За последние несколько дней или недель. В Visual Studio C++ мне трудно ShellExecuteEx()
пытаясь запустить exe с параметром внутри exe. Это происходит так, что я запускаю отладочную программу в Visual Studio (даже за ее пределами). Программа запустит другую программу, и она успешно запустится, но она не генерирует вывод файла.txt. Я не был уверен, правильно ли я использовал параметр. Вот шаги, которые я пытаюсь достичь:
- Запустите MainTest.exe (exe, который откроет ScreenCapture.exe)
- Экран Cmd - MainTest.exe запущен и готовится запустить ScreenCapture.exe с помощью ShellExecuteEx
- UAC всплывает, запускается от имени администратора
- Новый экран cmd - ScreenCapture.exe запущен с параметрами и каталогами
- ScreenCapture.exe завершает команду и закрывает
- 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);