■■■一个关于windows服务启动外部程序的问题,折磨了我很久
我在做一个服务,用来定时的检测每个程序是不是运行,如果没有运行则启动这个程序我是在定时器中完成的启动
Process proc=new Process();
proc.StartInfo.FileName=path;
proc.StartInfo.WindowStyle=ProcessWindowStyle.Normal;
proc.Start();
这个启动在普通程序里面是可以看到界面的
但是服务启动的这个进程没有界面,而我的这个服务是设置成“允许服务与桌面交互”的,按道理是可以显示界面的
奇怪的问题,希望高手解答
--------------------编程问答-------------------- 没用过..帮你顶! --------------------编程问答-------------------- 安道理给服务设置了“允许服务与桌面交互”,就应该可以看到启动外部程序的窗体啊
--------------------编程问答-------------------- 顶一下 --------------------编程问答-------------------- 把你要启动的程序 考到system32目录下试试 --------------------编程问答-------------------- cancerser(都是混饭吃,记得要结帖)
------------------------------
好的 --------------------编程问答-------------------- system32目录下
还是不行啊…… --------------------编程问答-------------------- 我觉得这个可能和Windows的UI消息循环有关. 在普通程序里你是用什么Timer? 估计是Windows Form Timer,它的Tick 事件是在Windows的UI消息循环上;而当你用服务启动时用的是什么Timer?估计是System.Timer 或System.Threading.Timer,这两个Timer的Event都是从.NET的Thread Pool中触发的,不在Windows的UI消息循环上.
你能不能做个实验,在你的服务里产生一个Form(反正你的服务是设置成“允许服务与桌面交互”的),然后从这个Form上的Windows Form Timer 中调用你原来的进程启动程序,这时候即使Form是隐藏的都没关系.
只是个猜测,不知道对不对,LZ可以试一下. --------------------编程问答-------------------- to RedGoldFish(红金鱼)
多谢,我用的是System.Timers.Timer
不过问题的原因很奇怪,因为服务在安装的时候我通过安装类里面修改了注册表而达到把该服务设置成“允许服务与桌面交互”,最后我换另一种MS推荐的设置方式在设置成“允许服务与桌面交互”,这样就没有问题了
最后我都不知道为什么会这样! --------------------编程问答-------------------- 另一种MS推荐的设置方式是什么,可否告知? --------------------编程问答-------------------- up --------------------编程问答-------------------- up --------------------编程问答-------------------- 你用的 是 xp系统么,实际上在vista以上的系统,由 与安全原因,服务和桌面应用程序不是在同一个账户下面,所以即使设置成允许与桌面进行交互,也无法显示,最好的方式,是通过套接字或者通信机制。 --------------------编程问答-------------------- 没用过,学习,帮顶 --------------------编程问答-------------------- 安全和uac 方面,另外也和系统有关. --------------------编程问答-------------------- 帮你顶下 --------------------编程问答-------------------- 服务启动的程序是后台的,所以看不到。
补充:.NET技术 , C#