我目前正在尝试运行带有一些参数的程序。我已经使用批处理文件做了这个。我在那里使用的命令是.\runtime\bin\python\python_mcp .\runtime\recompile.py %*
我实际上在网上找到了一个很好的启动程序功能,我只是调整了一下。由于我从一个非常不同的位置运行新程序,因此相同的命令不起作用(我猜这是造成问题的$*
!)
我试过这个和一些变化。
ExecuteProcess(L"E:\\Modding\\mcp\\runtime\\bin\\python\\python_mcp.exe", L"E:\\Modding\\mcp\\runtime\\recompile.py %*");
以下是该函数的代码:
size_t ExecuteProcess(wstring FullPathToExe, wstring Parameters = L"", size_t SecondsToWait = -1)
{
size_t iMyCounter = 0, iReturnVal = 0, iPos = 0;
DWORD dwExitCode = 0;
std::wstring sTempStr = L"";
/* - NOTE - You should check here to see if the exe even exists */
/* Add a space to the beginning of the Parameters */
if (Parameters.size() != 0)
{
if (Parameters[0] != L' ')
{
Parameters.insert(0,L" ");
}
}
/* The first parameter needs to be the exe itself */
sTempStr = FullPathToExe;
iPos = sTempStr.find_last_of(L"\\");
sTempStr.erase(0, iPos +1);
Parameters = sTempStr.append(Parameters);
/* CreateProcessW can modify Parameters thus we allocate needed memory */
wchar_t * pwszParam = new wchar_t[Parameters.size() + 1];
if (pwszParam == 0)
{
return 1;
}
const wchar_t* pchrTemp = Parameters.c_str();
wcscpy_s(pwszParam, Parameters.size() + 1, pchrTemp);
/* CreateProcess API initialization */
STARTUPINFOW siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()),
pwszParam, 0, 0, false,
CREATE_DEFAULT_ERROR_MODE, 0, 0,
&siStartupInfo, &piProcessInfo) != false)
{
/* Watch the process. */
dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (SecondsToWait < 0) ? INFINITE : (SecondsToWait * 1000));
}
else
{
/* CreateProcess failed */
iReturnVal = GetLastError();
}
/* Free memory */
delete[]pwszParam;
pwszParam = 0;
/* Release handles */
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);
return iReturnVal;
}
是的,我正在改造我的世界
答案 0 :(得分:1)
代码本身有效,所以我只能假设“不工作”意味着第二个应用程序启动但退出失败。当您从批处理文件执行此操作时,命令行末尾的%*
将被删除,因为shell会尝试将其扩展为环境变量(想想%PATH%)。当您将其作为参数传递给CreateProcess
时,%*
将作为附加参数传递,并可能转发给recompile.py
。如果%*
被python脚本解释为文件名,它将无法找到它并将以失败退出。
答案 1 :(得分:0)
问题不在于%*
。需要从E:\Modding\mcp\
调用python脚本。所以我只需要改变文件调用的路径!