考慮下面的代碼和它的可執行 - runner.exe
:連鎖多種ShellExecute的調用
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = "open";
shExecInfo.lpFile = argv[1];
string Params = "";
for (int i = 2; i < argc; ++i)
Params += argv[i] + ' ';
shExecInfo.lpParameters = Params.c_str();
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_SHOWNORMAL;
shExecInfo.hInstApp = NULL;
ShellExecuteEx(&shExecInfo);
return 0;
}
這兩個批處理文件都做他們應該做的,這是NOTEPAD.EXE運行,運行的notepad.exe,並告訴它嘗試打開的test.txt:
1.
runner.exe notepad.exe
2.
runner.exe notepad.exe test.txt
現在,考慮這個批處理文件:
這個應該運行runner.exe並將notepad.exe作爲其命令行參數之一發送,不是嗎?然後,runner.exe的第二個實例應該運行notepad.exe - 這不會發生,我得到一個「Windows無法找到'am'。請確保您輸入了正確的名稱,然後再次嘗試」錯誤。如果我打印argc
參數,它的第二個runner.exe實例是,它們都是奇怪的東西,如Files \ Microsoft,SQL,Files \ Common等。我無法弄清楚爲什麼會發生這種情況。我希望能夠儘可能多地使用命令行參數來執行儘可能多的runner.exe調用,或者至少2.我該怎麼做?
我正在使用Windows 7,如果這有所作爲。
工作目錄是什麼? – lunixbochs 2010-03-15 16:41:30
您可以嘗試在調用ShellExecute函數之前打印出SHELLEXECUTEINFO結構的值嗎? – dirkgently 2010-03-15 16:42:42
@lunixbochs - bat文件和runner.exe文件都在同一個目錄中。 notepad.exe是在別的地方,但它應該重要,因爲'runner.exe notepad.exe'工作正常嗎?可以'shExecInfo.lpDirectory = NULL;'是問題嗎?我不確定我是否回答了你的問題,對不起,如果我沒有... – IVlad 2010-03-15 16:44:38