替代“允许服务与桌面交互”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我在服务器上安装了一个Windows服务(C#),它每10分钟启动一次可执行文件(C#),以处理从一个目录到另一个目录的一些图像。不需要与任何用户进行交互。但是,由于可执行文件作为输出窗口,要使服务运行,我必须启用“允许服务与桌面交互“复选框。我该如何解决这个问题?我喜欢将可执行文件与windows服务分开,因为

  • 它使调试变得更容易,并且不需要重新部署完整的windows服务。
  • 有时,我使用相同的windows服务以不同的间隔启动多个可执行文件(但所有文件都与同一项目相关)。

编辑:

当未启用与桌面的交互时,控制台应用程序将无法正确执行,并且Windows日志中会出现以下错误:

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4b8304c3, 
faulting module KERNEL32.dll, version 6.0.6002.18005, time stamp 0x49e03821, 
exception code 0xc0000142, fault offset 0x00009eed, process id 0x10ec, 
application start time 0x01cab736950a64b5.

一旦启用桌面交互,应用程序就会正常执行。

提问于
用户回答回答于

正在使用Vista及更高版本,并且实际上不需要与用户进行任何交互,但需要执行一个交互式的exe,则应该有助于缓解人们对于让服务与桌面交互(在会话0中没有物理控制台)的“不良实践”的担忧。

此会话0隔离将阻止非特权用户执行,他们在不同的会话中获得了他们的交互式桌面。粉碎攻击是这种“与桌面的交互”被认为是错误做法的主要原因,如果您正在使用Vista或更高版本,如果您无法避免它(或者需要花费太多的精力来完成它)。

用户回答回答于

我知道这有点晚了,但在这种情况下,我会使用任务调度程序,而不需要使用windows服务。任务调度程序具有一组全面的调度选项,可以运行有问题的控制台应用程序。

扫码关注云+社区