为什么我可以在交互模式下使用Windows服务启动给定的应用程序,但不能作为服务? (的Process.Start)

时间:2017-12-08 14:45:48

标签: c# windows service process process.start

你好!我目前正在编写一个简单的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中以交互模式运行服务。

有人对任何事情都有任何想法吗?

1 个答案:

答案 0 :(得分:0)

服务入门片段以帮助您入门

{
using System.ServiceProcess;
using...

namespace myServicenamespace
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] { 
                new myService() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}

myService在其他地方定义为您要运行的代码,包括

{
protected override void OnStart() {...}
protected override void OnStop {...}
}

服务的部署也有所不同,如上所述,请查看ServiceProcess上的其他文档以了解更多信息。