Delphi怎样写一个最简单的能显示窗体的TService?

FlashDance 2014-07-22 10:43:52
下面的代码无法显示出Form2(Win7+XE5):

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs;

type
TService1 = class(TService)
procedure ServiceStart(Sender: TService; var Started: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
Service1: TService1;

implementation

{$R *.DFM}

uses Unit2;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Vcl.SvcMgr.Application.Create(TForm2,Form2);
Form2.Show;
end;

end.
...全文
436 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZyxIp 2014-08-01
  • 打赏
  • 举报
回复
服务是开机自动运行,用户不登录也可以运行。 界面程序肯定是要用户操作的,只要用户登录运行显示就好。 如果你的界面不是每次开机必须要用户操作,那就做两个程序,一个服务程序,一个界面程序。 服务程序处理业务,给数据库写信息。 界面程序来操作参数,读取当前的运行状态。
heisenbergde 2014-07-30
  • 打赏
  • 举报
回复
to mwy654321 我总共还有40分,全部都给你行不行?麻烦你贴出代码看看是怎么解决的?其实我也有一份前人写的代码,但不是很理解。
「已注销」 2014-07-23
  • 打赏
  • 举报
回复
会话隔离,不能!你可以通过服务启动一个交互会话的新的进程。当然此时是两个进程。
FlashDance 2014-07-23
  • 打赏
  • 举报
回复
引用 10 楼 rainychan2009 的回复:
[quote=引用 9 楼 FlashDance 的回复:] [quote=引用 8 楼 rainychan2009 的回复:] [quote=引用 3 楼 FlashDance 的回复:] [quote=引用 1 楼 wr960204 的回复:] 在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?[/quote] 中间层就统一提供数据存取,操作通过客户端请求不行吗?感觉很怪。[/quote] 有时会上服务器上打开中间层进行一些操作,如:查看在线数量,向客户端发送一些文字信息……,这并不奇怪[/quote] 那只能说设计成这样了。在线用户也可以通过接口取,发送文字信息也是出于某个目的。也许是需求.....[/quote] 这只是个例子,而且并不是要给其它用户取,而是服务器管理员打开中间层做一些管理 实际上会打开中间层做其它操作,这没什么不合理啊。
无条件为你 2014-07-23
  • 打赏
  • 举报
回复
如何增加可用分? a.登录且参与回复,每天可增加10分可用分; b.当您发表了精彩的帖子,获得版主推荐,将获得88分奖励; c.积极参加论坛各项活动,如押宝游戏,便可赢取可用分; d.技术分增长 每周技术分增加30分以上,可用分增加40分; e.多次回复 每周回复10次以上,可用分增加30分; f.结帖返回50%帖子分数; 综上所述,只要你经常来论坛发贴,你的可用分就会增多,跟是否别人结贴时给你分或者不给,无关。 那么,等你赚够了分再来要具体代码吧,我这里还是友情回答一下实现思想:你要先用某函数提升系统权限,获取Token,以及SessionId,如果你是个聪明的人,这些信息可以帮助你在网上搜到答案。 另外你也可以给本贴加分,以增加你对问题的重视,以及别人的回答动力。
rainychan2009 2014-07-23
  • 打赏
  • 举报
回复
引用 9 楼 FlashDance 的回复:
[quote=引用 8 楼 rainychan2009 的回复:] [quote=引用 3 楼 FlashDance 的回复:] [quote=引用 1 楼 wr960204 的回复:] 在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?[/quote] 中间层就统一提供数据存取,操作通过客户端请求不行吗?感觉很怪。[/quote] 有时会上服务器上打开中间层进行一些操作,如:查看在线数量,向客户端发送一些文字信息……,这并不奇怪[/quote] 那只能说设计成这样了。在线用户也可以通过接口取,发送文字信息也是出于某个目的。也许是需求.....
FlashDance 2014-07-23
  • 打赏
  • 举报
回复
引用 8 楼 rainychan2009 的回复:
[quote=引用 3 楼 FlashDance 的回复:] [quote=引用 1 楼 wr960204 的回复:] 在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?[/quote] 中间层就统一提供数据存取,操作通过客户端请求不行吗?感觉很怪。[/quote] 有时会上服务器上打开中间层进行一些操作,如:查看在线数量,向客户端发送一些文字信息……,这并不奇怪
rainychan2009 2014-07-23
  • 打赏
  • 举报
回复
引用 3 楼 FlashDance 的回复:
[quote=引用 1 楼 wr960204 的回复:] 在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?[/quote] 中间层就统一提供数据存取,操作通过客户端请求不行吗?感觉很怪。
FlashDance 2014-07-23
  • 打赏
  • 举报
回复
引用 6 楼 mwy654321 的回复:
如何增加可用分? a.登录且参与回复,每天可增加10分可用分; b.当您发表了精彩的帖子,获得版主推荐,将获得88分奖励; c.积极参加论坛各项活动,如押宝游戏,便可赢取可用分; d.技术分增长 每周技术分增加30分以上,可用分增加40分; e.多次回复 每周回复10次以上,可用分增加30分; f.结帖返回50%帖子分数; 综上所述,只要你经常来论坛发贴,你的可用分就会增多,跟是否别人结贴时给你分或者不给,无关。 那么,等你赚够了分再来要具体代码吧,我这里还是友情回答一下实现思想:你要先用某函数提升系统权限,获取Token,以及SessionId,如果你是个聪明的人,这些信息可以帮助你在网上搜到答案。 另外你也可以给本贴加分,以增加你对问题的重视,以及别人的回答动力。
加了一次分之后,再加就提示“该帖已达到分数最大值,不允许加分操作。” 麻烦朋友上代码吧,大家都会感谢你的。
武稀松 2014-07-22
  • 打赏
  • 举报
回复
在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
FlashDance 2014-07-22
  • 打赏
  • 举报
回复
引用 4 楼 mwy654321 的回复:
在XP下,很好实现。在WIN7下,麻烦很多,但仍然可以实现,我可以给你提供完美的代码,并贴出来,但也希望你有奉献精神,才50分,太少了,这么不好弄的功能,只给这点分,哎!
好像剩余还有100分,可以另开贴全给你,不好意思
无条件为你 2014-07-22
  • 打赏
  • 举报
回复
在XP下,很好实现。在WIN7下,麻烦很多,但仍然可以实现,我可以给你提供完美的代码,并贴出来,但也希望你有奉献精神,才50分,太少了,这么不好弄的功能,只给这点分,哎!
FlashDance 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 wr960204 的回复:
在Vista和Windows7以上服务是运行在不同的会话中,不能在用户的会话显示界面,完全隔离了. 只能是在用户会话运行带界面的程序,和服务程序进行进程通讯来控制. 如果是XP以下版本的话可以选择允许和用户互交来显示界面.
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?
FlashDance 2014-07-22
  • 打赏
  • 举报
回复
那么三层的中间件,在win7以上要开机自动运行,有时还要打开窗口进行一些操作 还有什么简易的好办法吗?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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