【问题标题】:Process.Start() does nothing when called from a C# written serviceProcess.Start() 从 C# 编写的服务调用时什么也不做
【发布时间】:2018-08-23 09:06:27
【问题描述】:

我创建了一个运行良好的服务,除了这部分不符合我的要求

shutdownProcess.StartInfo.RedirectStandardError = true;
shutdownProcess.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\Siemens\Automation\WinCC RT Advanced";
shutdownProcess.StartInfo.FileName = @"C:\Program Files (x86)\Siemens\Automation\HmiRtmShutdown.exe";
shutdownProcess.Start();

string errors = shutdownProcess.StandardError.ReadToEnd();
eventLog1.WriteEntry(errors, EventLogEntryType.Error, eventId++);

问题是进程没有执行; 如您所见,我尝试在日志中记录错误,但是日志记录了一个空字符串,因此似乎没有错误;

当我从 cmd.exe 调用此应用程序时,它运行良好;我还尝试将 process.start() 与 cmd.exe 一起使用,将路径作为参数传递,但它不起作用; 我将该服务安装为 LocalSystem 以赋予它最大权限; 我还尝试将服务放入同一文件夹并仅调用 .exe 以排除写入路径时出现的错误;什么都没有

请帮忙!

【问题讨论】:

  • 你确定被调用的进程很高兴在没有任何交互式 UI 的会话 0 中执行吗?还要确保将UseShellExecute 设置为falseCreateNoWindow 设置为true
  • 您好,谢谢;被调用的进程用于关闭一个siemens应用,没有UI;会话呢?
  • 将VS调试器附加到服务进程(Debug, Attach to Process),在Process.Start上下断点。这将帮助您诊断问题。
  • 从 Vista 开始(如果我没记错的话,不确定)服务在单独的非交互式会话 (0) 上运行,而您的用户应用程序在单独的会话上运行(例如第一次登录用户的会话 1 )。如果被调用的进程确实使用例如消息和/或模拟用户输入与会话 1 中的应用程序交互,那么它将无法工作(因为 会话是隔离的)。安装服务时,可以选择启用“允许服务与桌面交互”。但是...这主要是为了兼容性,而不是这样的好习惯。
  • 您好,非常感谢,我尝试启用此选项,但没有效果

标签: c# .net windows service


【解决方案1】:

您不能执行尝试呈现用户界面或被设计为需要从 Windows 服务交互式登录的应用程序或可执行文件,该 Windows 服务在后台运行,在 UI 较少模式下(从 Vista 开始的会话 0,正如其他人所言)。

尝试编写一些单元测试并从 Visual Studio 中的单元测试运行您的代码,如果一切正常但 Windows 服务无法正常工作,那么问题正是上面解释的问题。

【讨论】:

  • 谢谢;我很确定这是问题所在,有一种解决方法可以通过服务完成这项工作吗?
猜你喜欢
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2012-07-25
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多