我正在尝试创建一个产生桌面应用程序的服务,然后监视以确保它在关闭时再次重新启动。
我希望它基本上产生进程然后忘记它,允许像普通的交互式应用程序一样。 (显然这在XP和以前更容易做,但我需要XP,Vista和7)
我现在的问题是,如果我使用process.start()并选中桌面交互式,它会显示为不可见,如果我直接生成一个表单,它会询问“你真的想要这样做吗?!”然后整个屏幕变为空白除了我的程序。
我只是希望这是一个无害的背景应用程序。我的应用程序运行良好,我只需要弄清楚如何从服务中生成它而不会遇到任何麻烦。
我发现所有这些东西都说“不要制作具有UI的服务”,但首先这是给我的要求。 (老板不希望它成为计划任务)另外,我注意到任务调度程序本身就是一项服务,它没有任何问题产生用户交互式应用程序。为什么我也不能这样做?
我做错了什么?
更新: 感谢所有有用的信息。能够说服我的老板,基于会话0隔离,这是不可能实现的,所以我标记了一个作为答案,并给予给予有用信息的每个人的投票。再次感谢! :)
答案 0 :(得分:1)
从Windows Vista(以及Windows 7)开始,出于安全原因,服务无法直接与用户/桌面交互。当您的用户登录会话1时,会话0中会显示从服务中生成的对话框和其他表单。有关详细信息,请阅读会话0隔离部分here。简而言之,在Windows 7上从Windows服务调用Process.Start()
会导致问题。
您仍然可以与用户进行互动。你必须间接地这样做,如here所述。我希望能指出你正确的方向。
答案 1 :(得分:1)
我会反驳为什么“Boss不希望它成为预定的任务”。您可以设置在每次登录时运行的计划任务,例如,这听起来就像您需要的那样。您还可以捕获Closing事件,并(从代码中)设置另一个计划任务,以便稍后重新启动。
老板可能没有得到的是服务很特别。例如,他们免于UAC。因此他们无法与用户交谈。如果你想要一些像服务一样走路和谈话的东西,但也要与用户交谈,那么Windows 7这个词就是预定的任务。
答案 2 :(得分:0)
你不能制作一个从用户登录开始的程序,并且会一直运行直到会话关闭吗?如果我是你,我会这样做。您可以使用用户的登录脚本启动它。
这里使用服务的一个问题是它们在没有用户信息的情况下运行,并且在没有人登录时也运行,因此不在服务中使用UI。