如何在服务程序中启动一个外部程序并弹出窗口来?急!!!!

linzi 2003-07-02 10:42:46
我在一个服务程序中调用了一个外部程序,程序运行了,但没有弹出窗口来,并且在任务管理器中也不能杀死,我用的调用外部程序的代码如下:

//运行一程序并等待它结束
function WinExecAndWait(FileName: string; Visibility: Integer): Cardinal;
var
zAppName: array[0..255] of char;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StrPCopy(zAppName,FileName);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,zAppName,nil,nil,False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,nil,StartupInfo,ProcessInfo) then
Result := 0
else
begin
WaitForSingleObject(ProcessInfo.hProcess,30000);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;

Result的返回值是$103:ERROR_TOO_MANY_SEM_REQUESTS

我该怎么办?
...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
linzi 2003-07-02
  • 打赏
  • 举报
回复
我在 Windows 服务程序中运行一个外部程序能弹出窗口来吗?用不用特殊的操作?
slley 2003-07-02
  • 打赏
  • 举报
回复
用winexec或shellExecute
李_军 2003-07-02
  • 打赏
  • 举报
回复
如果你是在线程中调用的话一定要用同步或者postmessage方式发送消息让它显示出来她才会显示出来的,异步条件下是不会显示出来的
李_军 2003-07-02
  • 打赏
  • 举报
回复
你改用winexec或shellExecute看看
linzi 2003-07-02
  • 打赏
  • 举报
回复
还是不行啊,我的过程是运行在一个线程里,但我把它拿出来到一个普通程序中是可以弹出来的
hmily1688 2003-07-02
  • 打赏
  • 举报
回复
楼上的两位老大还来和我抢分,郁闷,我习惯用shellexecute;
ShellExecute(0, nil, 'http://www.sina.com.cn', nil, nil, SW_NORMAL);
李_军 2003-07-02
  • 打赏
  • 举报
回复
你用WinExec或者shellexecute
你现在用的这种方式是她的程序作为你的一个线程使用,要在任务管理器中把你的程序关掉,她才会退出来
linzi 2003-07-02
  • 打赏
  • 举报
回复
我做出来了,原来要设置StartupInfo.lpDesktop := PChar('winsta0\default');,将这句加入到我上面的程序中去就可以了。
linzi 2003-07-02
  • 打赏
  • 举报
回复
用winexec或shellExecute也是不行的

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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