【发布时间】:2017-12-08 14:45:47
【问题描述】:
你好!我目前正在编写一个简单的 C#.NET 服务,该服务会在 PC 失去其无线连接 30 秒时停止给定进程。无线连接返回后,它将重新启动该过程。服务中的所有逻辑看起来都很合理,当我在我的 Visual Studio 开发环境中运行该服务时,它可以完美地运行,目标应用程序从运行该服务的 PC 上存在的同一目录中运行。但是,当我在远程 PC 上运行该服务时,应用程序在重新连接到网络时永远不会重新启动。在 try-catch 中也没有遇到错误。我已经阅读了很多关于工作目录是一个问题的内容,但这并不能解释为什么它在我的机器上运行而不是在另一台机器上运行。这是我目前正在使用的代码:
try
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = @"C:\Path\Application\Application.exe";
processInfo.WorkingDirectory = Path.GetDirectoryName(@"C:\Path\Application\Application.exe");
processInfo.ErrorDialog = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
Process proc = Process.Start(processInfo);
}
catch (Exception ex)
{
LogTrace.TraceLine("Error re-starting process " + startInfo.FileName + ": " + ex, false);
}
其他一些注意事项:
-我尝试过使用不同权限级别的不同用户运行服务。以管理员身份运行服务没有任何区别。
-UAC 完全关闭。
-我已尝试使用 FireDaemon 在目标 PC 上的会话 0 中以交互模式运行服务。
有人对要研究的任何事情有任何想法吗?
【问题讨论】:
-
不要使用 process.Start 服务,看看 System.ServiceProcess 命名空间文档和示例。
-
@Rob 感谢您的回复,但实际上在我的情况下,我正在尝试使用我编写的服务结束并重新启动应用程序 .exe。应用程序的重新启动是我失败的地方。
标签: c# windows service process process.start