我做了一个服务程序来启动另一个程序,但为什么被启动的程序只在进程中看到,没显示其界面?

时间:2022-08-29 14:54:42
代码如下:
procedure TService1.Timer1Timer(Sender: TObject);

  var
 handle,myhwnd:hwnd;
begin
 myhwnd:=FindWindow(nil,'test-client');
 if myhwnd=0 then
  winexec(PChar('D:\cstest\cstest\Client\Client.exe'), SW_SHOWNORMAL);
end;

就是client,不会显示其界面。

8 个解决方案

#1


是不是你的Timer 的 enabled 没置为True啊

#2


不是的,client已经在任务管理器中的进程中看到了,已启动了。

#3


自己已解决了

#4


引用 3 楼 xy_c 的回复:
自己已解决了

是真慢回事?学习下

#5


桌面交互的问题吧!

#6


你好,请问这个桌面交互的问题怎样解决的?
我也碰到这样的问题!
就是服务A启动起来了,这个服务也启动某个(B)程序【任务管理器也能看见B.exe】,但是界面没有显示,请问你是怎样解决的呢?

#7


呵呵,俺知道了!
1:服务程序默认是工作于Winlogon桌面的,可以打开控制面板,查看我们刚才那个服务的属性-->登陆,其中"允许服务与桌面交互"打钩就可
2:用程序;创建服务时:
schService=CreateService(schSCManager,
szServiceName,  //服务名字
szDisplayName,  //服务名字
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szPath,  //服务(.exe)路径
NULL,
NULL,
NULL,
NULL,
NULL
);

SERVICE_WIN32_OWN_PROCESS 修改为:SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS

现在在服务属性时就可以看见"允许服务与桌面交互"自动√了。

#8


在2003下还是不行的

#1


是不是你的Timer 的 enabled 没置为True啊

#2


不是的,client已经在任务管理器中的进程中看到了,已启动了。

#3


自己已解决了

#4


引用 3 楼 xy_c 的回复:
自己已解决了

是真慢回事?学习下

#5


桌面交互的问题吧!

#6


你好,请问这个桌面交互的问题怎样解决的?
我也碰到这样的问题!
就是服务A启动起来了,这个服务也启动某个(B)程序【任务管理器也能看见B.exe】,但是界面没有显示,请问你是怎样解决的呢?

#7


呵呵,俺知道了!
1:服务程序默认是工作于Winlogon桌面的,可以打开控制面板,查看我们刚才那个服务的属性-->登陆,其中"允许服务与桌面交互"打钩就可
2:用程序;创建服务时:
schService=CreateService(schSCManager,
szServiceName,  //服务名字
szDisplayName,  //服务名字
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szPath,  //服务(.exe)路径
NULL,
NULL,
NULL,
NULL,
NULL
);

SERVICE_WIN32_OWN_PROCESS 修改为:SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS

现在在服务属性时就可以看见"允许服务与桌面交互"自动√了。

#8


在2003下还是不行的