2017-04-24 31 views
0

來執行帶參數的exe文件。在Visual Studio C++中,我很難與ShellExecuteEx()試圖在exe中運行帶有參數的exe文件。它發生的方式是我在Visual Studio中運行調試程序(甚至在外面)。該程序將啓動另一個程序併成功運行,但不會生成.txt文件輸出。我不確定我是否正確使用了參數。 這是我想實現的步驟:C++ ShellExecuteEx不會通過在最近幾天或幾周內不從該exe文件生成輸出

  1. 開始MainTest.exe (中,將打開ScreenCapture.exe EXE)
  2. 命令屏幕 - MainTest.exe開始,並準備使用啓動ScreenCapture.exe的ShellExecuteEx
  3. UAC彈出,以管理員身份運行
  4. 新命令屏幕 - 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(此文件)運行它。我無法獲得輸出。

+2

你可能有.txt文件,你找不到它。這種問題首先不使用文件的完整路徑(如baz.txt而不是c:\ foo \ bar \ baz.txt),並且由於未設置程序的工作目錄而變得更糟。確保將lpDirectory設置爲C:/ Program File(x86)/ Test。 –

+0

感謝您的評論,我添加了lpDirectory,可悲的是沒有發生任何變化。程序是否可以阻止它被寫入目錄?有沒有一種方法可以將整個程序設置爲以管理員身份運行,以確保所有內容都具有UAC權限。 – Engrsky

+0

我看到一串正斜槓沒有在字符串文字中正確轉義。這是否至少會產生編譯器警告? – MrEricSir

回答

0

從MSDN文檔ShellExecuteEx function,您首先需要初始化COM。這裏的例子有:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); 
+0

我不確定如何使用這個函數,我在'auto str = etc etc'之前的代碼的開始處添加了這個函數,而且我沒有看到變化。 – Engrsky

+0

可能在這裏處理一些事情......其中之一是64位與32位。閱讀一些在這裏的評論:[如何運行應用程序需要管理員權限從一個沒有他們](http://stackoverflow.com/questions/11586139/how-to-run-application-which-requires- admin-rights-from-one-that-doesnt-have-th) –

+0

您還應該確保正確初始化該'SHELLEXECUTEINFO'結構的所有字段 - [doc](https://msdn.microsoft.com/zh-cn/ -us/library/windows/desktop/bb759784(v = vs.85).aspx)我正在查看顯示比您初始化時顯示更多的字段。 –

相關問題