过去几天或几周。在 Visual Studio C++ 中,我在尝试使用 exe 内的参数运行 exe 时遇到困难。发生这种情况的方式是我在 Visual Studio 中运行调试程序(甚至在外部)。该程序将启动另一个程序并成功运行,但它不会生成 .txt 文件输出。我不确定我是否正确使用了该参数。 这是我试图实现的步骤:

  1. 启动 MainTest.exe (将打开 ScreenCapture.exe 的 exe)
  2. Cmd 屏幕 - MainTest.exe 已启动并准备使用 ShellExecuteEx 启动 ScreenCapture.exe
  3. 弹出UAC,以管理员身份运行
  4. 新的 cmd 屏幕 - ScreenCapture.exe 使用参数和目录启动
  5. ScreenCapture.exe 完成命令并关闭
  6. 由 ScreenCapture.exe 生成的 CaptureText.txt 放置在与 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); 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!