【发布时间】:2010-11-11 06:28:26
【问题描述】:
您好,我有以下代码,但它没有按预期工作,无法弄清楚问题所在。
基本上,我正在执行一个进程(一个 .NET 进程)并传递命令行参数,它由 CreateProcess() 成功执行,但 CreateProcess() 没有传递命令行参数
我在这里做错了什么??
int main(int argc, char* argv[])
{
PROCESS_INFORMATION ProcessInfo; //This is what we get as an [out] parameter
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
LPTSTR cmdArgs = "name@example.com";
if(CreateProcess("D:\\email\\smtp.exe", cmdArgs,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
printf("Yohoo!");
}
else
{
printf("The process could not be started...");
}
return 0;
}
编辑:嘿,还有一件事,如果我像这样传递我的cmdArgs:
// a space as the first character
LPTSTR cmdArgs = " name@example.com";
然后我得到错误,然后 CreateProcess 返回 TRUE 但我的目标进程没有执行。
Object reference not set to an instance of an object
【问题讨论】:
-
如何检测到参数没有通过?
-
我检查执行进程的输出,如果没有传递任何参数,目标进程会打印错误并终止
-
我想可能还有其他问题。你能在程序启动的开头插入一个延迟,并在它启动后附加一个调试器吗?
-
在程序的开头(静态 void Main() 函数)你插入类似 System.Threading.Thread.Sleep(20000);并在该语句之后的行上设置断点。然后编译 C# 程序并使您的主程序启动 C# 程序。当 C# 程序启动时,它将在该语句上暂停 20 秒 - 这足以让您在 VisualStudio 中执行 Tools->Debug Processes 并附加到 C# 程序。 20 秒后,C# 程序将在调试器中停止,然后您可以逐步调试它。
-
微软的这个解释可能对我有帮助,但对我来说也是一样的困惑。 support.microsoft.com/kb/175986
标签: c++ winapi createprocess