我准备做一个程序,在每台电脑做一个客户端,在我的电脑上面做一个服务端。在服务端上面可以控制客户端进行比如邮件PST文件备份的指定的共享文件夹,也可以控制客户端从指定的文件夹运行某个程序或是复制一些文件到本地电脑的指定文件夹之类的。可以我把客户端改做成服务程序的时候比如运行:ShellExecute(handle,'open','c:\acdsee\acdsee32.exe',nil,nil,SW_ShowNormal);这个语句在应该程序中可以运行,跳出acdsee图片浏览窗口出来。改成服务程序的时候acdsee32也会运行,但是不会跳出窗口出来,结束这个acdsee32程序也不能够结束。还有copyfile语句在应该程序中可以,但在服务程序中就不行了。请问各位大侠这是什么原因。

解决方案 »

  1.   

    因为你的服务是以System帐号运行的。
    应该说它运行在另外一个用户桌面环境,所以在登录用户的桌面环境看不到界面(不知道对不)。
    而登录用户,需要SE_DEBUG权限才能结束(以System帐户运行的)服务程序,而默认情况下,即使管理员身份,也不曾赋予该权限。
      

  2.   

    解决办法应该是使用CreateProcessAsUser应该可以解决上述问题。
      

  3.   

    谢谢各位大侠们的回答,但我想知道的主要目的不是进程不能够结束,而是比如运行ShellExecute(handle,'open','c:\acdsee\acdsee32.exe',nil,nil,SW_ShowNormal);这个语句时不能够像应该程序一样正常运行,跳出程序窗口出来。要怎样程序才能够正常被执行