CreateProcess

wjx_0_2001 2010-07-29 12:36:15
PROCESS_INFORMATION pi;
STARTUPINFO si;

if(!CreateProcess("SetServer.exe", //为一对话框小程序
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi)
)
{
DWORD d=GetLastError(); //1400---无效的窗口句柄。 }
else
{

MessageBox("OK");
}
...全文
144 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjx_0_2001 2010-07-30
MyServiceStatus.dwServiceType = SERVICE_WIN32|SERVICE_INTERACTIVE_PROCESS;

还是不行
回复
wjx_0_2001 2010-07-30
拼命改,拼命试…………

终于然它显示出来了

散分……

将会把结果公布出来……

先调试别的

多谢各位
回复
wltg2001 2010-07-29
另外,要注意的是,上面的代码如果在UNICODE下编译可能会失败,因为它要求第二个参数是一个字符串变量,所以你可以写成:
TCHAR szAppName[]=_T("xxxx");然后调用。
回复
wltg2001 2010-07-29
给你个MSDN上的例子:
#include <windows.h>
#include <stdio.h>

void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
回复
wltg2001 2010-07-29
PROCESS_INFORMATION pi;
STARTUPINFO si;
========
这个两个都要初始化的。
回复
xxd_qd 2010-07-29
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
回复

PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&ProcessInfo,sizeof(ProcessInfo));
ZeroMemory(&StartupInfo,sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);

if(CreateProcess(_T("abc.exe"),NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&StartupInfo,&ProcessInfo)==FALSE)
return;
回复
xxd_qd 2010-07-29
si是输入参数,你没有事先给si赋值。
回复
bulijun1987 2010-07-29
STARTUPINFO 参数初始化
回复
wltg2001 2010-07-29
如果在win7下,好像没有什么好办法吧
回复
wltg2001 2010-07-29
[Quote=引用 10 楼 wjx_0_2001 的回复:]
相关参数初始化...
CreateProcess("SetServer.exe.....

在基于一个对话框的程序里,SetServer.exe是能够执行的。


但是,如果我把上述代码放在一个服务程序里,虽然在任务管理器里能看见SetServer.exe进程,但是其对话框窗口,且没能显示出来
[/Quote]
又是服务程序的事,如果不是在win7下的话,那么服务程序必须要设成交互式服务,也就是在用CreateService创建服务时,第五个参数:dwServiceType,要加上SERVICE_INTERACTIVE_PROCESS才行。
回复
wjx_0_2001 2010-07-29
相关参数初始化...
CreateProcess("SetServer.exe.....

在基于一个对话框的程序里,SetServer.exe是能够执行的。


但是,如果我把上述代码放在一个服务程序里,虽然在任务管理器里能看见SetServer.exe进程,但是其对话框窗口,且没能显示出来

回复
Eleven 2010-07-29
解决??
回复
na_he 2010-07-29
解决了,呵呵。
回复
wjx_0_2001 2010-07-29
多谢楼上两位

回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告