刚学会一点点,看到一些资料上说SvcMgr和Forms单元中都有Application定义,因此在服务程序中不能使用窗体,不然会引起冲突。但我看到TService有一个属性Interactive指定是否与桌面进行交互,就弄不太明白了。
我的程序有两部分,一部分是后台运行的服务程序,一部分是用于设置一些参数的界面,如果可能我想把这两部分做在一个程序中,而且可以互相传递参数或消息(不知是否可以向Service发送及接收消息);比如后台服务发现某种状况则通知窗体以作某些显示,窗体设置了一些参数则通知后台服务重新读取参数。
我看见过有类似实现的程序,不知Delphi如何做到?

解决方案 »

  1.   

    偶试了一下,在服务工程中加入窗体并在服务启动时显示,不去操作窗体一切正常,一旦人为关闭窗体,CPU马上占用100,且服务也无法正常终止了。
    还有就是直接运行服务程序没有入口代码,只能起个带参数Install和UnInstall作用,不知是不是?。procedure TServiceTest.ServiceStart(Sender: TService; var Started: Boolean);
    begin
    if Form2=nil then Form2:=TForm2.Create(Service1);
    Form2.Show;//该窗体被关闭后CPU=100%,且服务无法正常Stop
    Started:=True;
    end;procedure TServiceTest.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
    if Form2<>nil then
    begin
    Form2.Close;
    Form2.Free;
    Form2:=nil;
    end;
    Stopped:=True;
    end;
      

  2.   

    建议参考一下Delphi的ScktSrvr原码,
    $(DELPHI)\Source\Vcl\ScktSrvr.dpr