我在C#的visual studio 2008中制作了一个Windows服务。在服务内部,我只写了单行代码
try
{
System.Diagnostics.Process.Start(@"E:\Users\Sk\Desktop\category.txt");
}
catch { }
然后我添加了项目安装程序&将serviceProcessInstaller1 Account属性更改为本地系统还将serviceInstaller1 start type属性更改为Automatic。 然后我建立了project.it成功。之后,我添加另一个项目,即设置project.i已添加主项目输出&我已将自定义操作添加为“DemoWindowsService(Active)的主要输出”。然后构建setup.setup已成功构建。然后我安装了setup&然后去服务启动service.service正确陈述但它没有执行任务。 我检查了路径是否正确&我也试过
System.Diagnostics.Process.Start(@"E:\Windows\system32\notepad.exe")
但结果仍然相同。我尝试了很多但没有得到答案。
答案 0 :(得分:6)
默认情况下,Windows服务无法与桌面交互,而Notepad是一个交互式应用程序。
如果您打开任务管理器,我怀疑您在启动服务后会看到notepad.exe
进程正在运行,并且您的服务正在按照您的想法执行,它只是不可见。
您可以通过在服务 MMC管理单元(Start -> Run -> Services.msc
)中右键单击服务来更改服务以与桌面交互,并选中允许服务进行交互Log On
标签上的桌面选项。
依赖此选项建议不,因为微软已表示将在更高版本的Windows中将其删除。
如果您考虑一下,这是有道理的,因为即使没有人登录到计算机上,Windows服务也可以使用(例如,没有“桌面”可以与之交互)。
答案 1 :(得分:2)
如果它不起作用,那么也许是因为抛出异常。但是,由于您使用try / catch块隐藏了所有异常,因此您永远不会知道什么是错误。
摆脱try / catch块,看看是否有助于你了解错误。
答案 2 :(得分:0)
您是否在服务的OnStart()方法中编写了单行代码?
如果您这样做了,那么将catch块更改为catch (Exception ex)
并将异常详细信息写入事件日志以查看异常发生的原因。