CreateProcess

wpalhm 2008-07-28 08:56:46
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
lpApplicationName和lpCurrentDirectory到底怎么合用?
lpCurrentDirectory这个的具体意思
...全文
424 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpalhm 2008-07-29
  • 打赏
  • 举报
回复
不会啊。我都是保存好了的。怎么可能改变呢?
jay的Fans 2008-07-29
  • 打赏
  • 举报
回复
在别的地方是不是改变了当前的工作目录,导致出现不一致的情况?
我前几天的一个程序就是因为在别的线程中改变了当前工作目录,导致文件读取错误。
wpalhm 2008-07-29
  • 打赏
  • 举报
回复
顶一下。望大虾
wpalhm 2008-07-29
  • 打赏
  • 举报
回复
不是 ,大家看看我的代码:


string strJDPath = iter->strPath+"\\"+iter->strName+".exe";
//使用绝对路径
//BOOL bRet = CreateProcess(strJDPath.c_str(), NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);

//使用相对路径
BOOL bRet = CreateProcess( (iter->strName+".exe").c_str(), NULL, NULL, NULL, FALSE, NULL, NULL, iter->strPath.c_str(), &si, &pi);


我的代码有两种路径,第一种是绝对路径,第二种是相对路径。
绝对路劲对于进程不牵涉别的路径时可以正常运行,可一旦此进程里面包含了别的需要读路径的时候就出问题了。

而相对路径可以解决这个问题。单同时相对路径又出现一个问题,就是一会正常一会又不正常。真时不明白为什么了?
执假以为真 2008-07-29
  • 打赏
  • 举报
回复
这个函数不是很简单嘛?没啥困难啊
psychickk 2008-07-29
  • 打赏
  • 举报
回复
在用相对路径前,试试GetCurrentDirectory,检查路径是否正确
duoduo_uk 2008-07-28
  • 打赏
  • 举报
回复
DWORD ExecuteProcess(std::string &exeString, std::string &outFile)
{
int iReturnVal = 0;
DWORD dwExitCode;
STARTUPINFO siStartupInfo = {0};
PROCESS_INFORMATION piProcessInfo = {0};
siStartupInfo.cb = sizeof(siStartupInfo);
exeString.append(" >> ");
exeString.append(outFile.c_str());

// siStartupInfo.dwFlags = STARTF_USESHOWWINDOW; //????????
// siStartupInfo.wShowWindow = SW_HIDE;


/* Execute */
if( !CreateProcess( NULL, // No module name (use command line)
LPSTR(exeString.c_str()), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
IDLE_PRIORITY_CLASS, // Set low priority for process
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&siStartupInfo, // Pointer to STARTUPINFO structure
&piProcessInfo ) // Pointer to PROCESS_INFORMATION structure
)
{
dwExitCode = GetLastError();
printf( "CreateProcess failed (%d)\n", dwExitCode );
return dwExitCode;
}
// Wait until child process exits.
WaitForSingleObject( piProcessInfo.hProcess, INFINITE );
/* Release handles */
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);

return iReturnVal;
};
dbkcpp 2008-07-28
  • 打赏
  • 举报
回复
建议你看看《Windows核心编程》吧。
wpalhm 2008-07-28
  • 打赏
  • 举报
回复
我看了好多遍也试了好多。都没法啊
wpalhm 2008-07-28
  • 打赏
  • 举报
回复
你能举个例子 吗?
独孤过儿 2008-07-28
  • 打赏
  • 举报
回复
你没有MSDN吗?
lockhall 2008-07-28
  • 打赏
  • 举报
回复
lpApplicationName 你要调用应用程序啊;
lpCurrentDirectory 应用程序的目录;
wpalhm 2008-07-28
  • 打赏
  • 举报
回复
顶一下

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧