Рассмотрим следующий код и его исполняемый файл - runner.exe
:
#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
Теперь рассмотрим этот командный файл:
3.
runner.exe runner.exe notepad.exe
Этот должен запустить runner.exe и отправить notepad.exe в качестве одного из аргументов командной строки, не так ли? Затем этот второй экземпляр runner.exe должен запустить notepad.exe - чего не происходит, я получаю сообщение «Windows не может найти« am ». Убедитесь, что вы правильно ввели имя, а затем повторите попытку». Если я напечатаю аргумент argc
, это будет 14 для второго экземпляра runner.exe, и все они будут странными вещами, такими как Files \ Microsoft, SQL, Files \ Common и так далее. Я не могу понять, почему это происходит. Я хочу иметь возможность записывать как можно больше вызовов runner.exe, используя аргументы командной строки, или как минимум 2. Как я могу это сделать?
Я использую Windows 7, если это имеет значение.