C ++ ShellExecuteEx不通过不从该exe生成输出来执行带参数的exe

时间:2017-04-24 15:53:11

标签: c++ windows visual-studio-2015 parameters shellexecuteex

最近几天或几周。在Visual Studio C ++中,我很难用ShellExecuteEx()尝试在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. 启动
  6. ScreenCapture.exe完成命令并关闭
  7. ScreenCapture.exe生成的CaptureText.txt与ScreenCapture.exe放在同一个directroy中。
  8. 问题是我没有在我的目录中获取CaptureText.txt,或者参数在此程序中有效。

    现在,如果我在不使用带参数的Test.exe的情况下运行ScreenCapture.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(此文件)运行它时。我无法生成输出。

1 个答案:

答案 0 :(得分:0)

ShellExecuteEx function的MSDN文档中,首先需要初始化COM。这个例子可以使用:

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);