急,一个头痛的问题,外部调用EXE,但这个EXE不执行Create事件(200分)

  • 主题发起人 主题发起人 lyjgs.168
  • 开始时间 开始时间
L

lyjgs.168

Unregistered / Unconfirmed
GUEST, unregistred user!
经理让做一个服务器监控程序,就是当我们的系统的服务器没有响应时装服务器重启,说明一下服务器有MainForm,启动以后是最小化到系统标题栏上的;经理让把这个监控程序做成一个Service Application;问题就出现在用这个监控程序重启服务的时候;
说一下我的重启步骤
1>在进程里找到我们服务器程序的进程;
2>得到服务器程序所在的路径;
3>Kill我们服务器程序进程;
4>打开服务器程序;
问题就出现在第四步;程序是可以启动起来,但就是不执行服务器的初始化事件;
ShellExecute,WinExec,CreateProcess
这三种方法我都试了,在进程里可以看到服务器程序的进程,但在标题栏上没有图标,后来自己又做了一个小程序让这个Service调用发现根本就没有执行它的create事件;
再后来又做了一个一般有程序用同样的方法调用服务器程序完全正常;
那位高人能解释一下这是为什么嘛;
 
下面粘上用CreateProcess方法调用过程;
Procedure ExcuteServerExe(ServerExePath: String);
var
si:TSTARTUPINFO;
pi:TPROCESSINFORMATION;
begin
si.cb:=Sizeof(si);
si.lpReserved:=nil;
si.lpDesktop:=nil;
si.lpTitle:=nil;
si.dwFlags:=STARTF_USESHOWWINDOW and STARTF_USESTDHANDLES;
si.cbReserved2:=0;
si.lpReserved2:=nil;
CreateProcess(Pchar(ServerExePath), nil, nil, nil,
False, CREATE_DEFAULT_ERROR_MODE and REALTIME_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(ServerExePath)), si,pi);
End;
 
就把create的事件写在其他能触发的事件下好了
 
to hhjjhhjj
这样不太好吧。那写到哪一个事件呢;它不执行窗口的Create事件,是不是应该就可以说它就没有创建窗口呢;
 
不好意思刚没有说完,我用EnumWindows找不到我用CreateProcess创建的ProcessID的Handle
 
各位高手来啊
 
大富翁的高手呢,都到哪里去了啊
 
这贴子也沉的太快了吧
 
算了,问题我找到了,这里怎么回事啊,一个贴子贴出来这么多天都没有人回答,高手们都到哪去了,都忙的没有看贴的时间了嘛
 
我在这里说一下这个问题吧;
到现在我还没有彻底搞清楚是为什么,我在ntservice的服务里启动的外部程序好像没有父类Handle;就是说它并没有在桌面的HANDLE(0)之下;
我在这个服务的属性页里设置 允许服务和桌面交互 就好了;
 
接受答案了.
 
后退
顶部