我想实现的功能是创建一个服务程序,然后在服务Start时动态创建一个窗体Form,然后把Form缩小时变成TrayIcon放在Windows托盘上。 我在服务程序的OnStart事件中写到 Started := True; writeWorkLog('serve2 start'); // 写日志 Svcmgr.Application.CreateForm(TForm1, Form1); Form1.show; 日志过程为: procedure writeWorkLog(sqlstr: string); var filev: TextFile; ss: string; begin sqlstr:=DateTimeToStr(Now)+' Log: '+sqlstr; ss:='d:\RunLog.txt'; if FileExists(ss) then begin AssignFile(filev, ss); append(filev); writeln(filev, sqlstr); end else begin AssignFile(filev, ss); ReWrite(filev); writeln(filev, sqlstr); end; CloseFile(filev); end; 但是Form1根本就不Show, 而日志中显示已经到Startg过程里。而我测试Form1.Showing为True,说明窗体还是显示了。 然后我在Form1的OnCreate事件中测试,日志文件都有显示到事件里来了,但就是不显示。 后来我在Form1中放了一个Label,在Form1的OnCreate事件中给Label.Caption重新赋值,再打印Label.Caption到txt内,发现Label的Caption已经修改了。 其实Form是显示出来了,只是在服务里启动的,屏幕上不显示。据说以前XP和以前的系统的可以,现在换成Win7了就不行了。 据说从Vista起,Windows的内核针对服务的桌面交互问题做了修改,服务所运行的帐号和当前登录的用户的帐号的桌面是独立的,所以不能够在桌面显示服务里面的窗体了。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论