【发布时间】:2012-03-03 22:37:58
【问题描述】:
我在 Linux mint 12 上。
我想运行一个程序usr/share/application/firefox,然后在任何地方传递一个字符串。我还没有找到适用于 Linux 的解决方案,但就我目前所见,有很多适用于 Windows 的理论。
size_t ExecuteProcess(std::wstring FullPathToExe, std::wstring Parameters, size_t SecondsToWait)
{
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 * 1000));
}
else
{
/* CreateProcess failed */
iReturnVal = GetLastError();
}
/* Free memory */
delete[]pwszParam;
pwszParam = 0;
/* Release handles */
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);
return iReturnVal;
}
你可以看到很多理论here 第一个答案描述了如何用 C 为 Linux 完成它,我想用 C++ 做,我已经搜索了几个小时,我看到了很多 理论时间>。这个主题似乎比量子物理学有更多的理论:)
我是一个 Python 人,因为我喜欢简单,所以如果可能的话,请给出一个可以在 32 位和 64 位上运行的简单代码。
如果usr/share/application/firefox 可用,我想做一些事情,运行它,否则运行usr/share/application/googlechrome
您能告诉我为什么不能在 Mac 和 Windows 上运行相同的代码吗?
【问题讨论】:
-
我开始编辑这个,但我认为它有太多错误无法挽救。你能把它清理干净,包括添加基本的大写和拼写吗?你的问题是什么?这不是一个网络论坛或“给我代码”网站。
-
在 C 中完成的任何事情都可以(几乎总是)在 C++ 中完成,因此在 C 中找到解决方案仍然几乎总是可以使用 C++ 进行编译。这里似乎还有不止一个问题。
-
如果你使用 std::wstring 那么“c”标签有点错误。
-
@LightnessRacesinOrbit 我认为 ildjarn 的答案是我所需要的
-
也许不是因为他删除了他的答案!奇怪