C ++ ShellExecuteEx不通过不从该exe生成输出来执行带有参数的exe
C++ ShellExecuteEx does not execute exe with parameter by not generating output from that exe
过去几天或几周。在 Visual Studio C++ 中,我很难 ShellExecuteEx()
尝试 运行 一个带有 exe 内部参数的 exe。它发生的方式是我 运行 Visual Studio 中的调试程序(甚至在外面)。该程序将启动另一个程序并成功 运行,但它不会生成 .txt 文件输出。我不确定我是否正确使用了参数。
这是我要实现的步骤:
- 启动MainTest.exe(将打开的exe文件ScreenCapture.exe)
- Cmd 屏幕 - MainTest.exe 已启动并准备使用 ShellExecuteExScreenCapture.exe 启动
- 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
的输出文件
但是,当我尝试使用我制作的 exe(此文件)执行 运行 它时。我无法生成输出。
根据 ShellExecuteEx
function 的 MSDN 文档,您首先需要初始化 COM。要使用的示例:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
过去几天或几周。在 Visual Studio C++ 中,我很难 ShellExecuteEx()
尝试 运行 一个带有 exe 内部参数的 exe。它发生的方式是我 运行 Visual Studio 中的调试程序(甚至在外面)。该程序将启动另一个程序并成功 运行,但它不会生成 .txt 文件输出。我不确定我是否正确使用了参数。
这是我要实现的步骤:
- 启动MainTest.exe(将打开的exe文件ScreenCapture.exe)
- Cmd 屏幕 - MainTest.exe 已启动并准备使用 ShellExecuteExScreenCapture.exe 启动
- 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
的输出文件但是,当我尝试使用我制作的 exe(此文件)执行 运行 它时。我无法生成输出。
根据 ShellExecuteEx
function 的 MSDN 文档,您首先需要初始化 COM。要使用的示例:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);