远程启动前台进程

时间:2016-02-22 17:48:38

标签: c#

如果进程尚未在远程服务器上运行,我需要检查并启动进程。我遇到的问题是进程作为后台进程启动,这是不希望的。以下是我用来启动该过程的代码:

public Process StartUploader()
    {
        try
        {
            var uploaderLocation = Properties.Settings.Default.CaptureLifeUploaderLocation;
            var uploadProcess = uploaderLocation + Properties.Settings.Default.CaptureLifeUploaderFilename;

            Logger.Info($"Checking {uploaderLocation} for {Properties.Settings.Default.CaptureLifeUploaderFilename}");

            if (Directory.Exists(uploaderLocation))
            {
                var files = Directory.EnumerateFiles(uploaderLocation).Count();
                if (files > 0)
                {
                    return Process.Start(uploadProcess);
                }
            }

            var errorMessage = $"{uploadProcess} not found. Please check the directory/filename and try again.";
            Logger.Error(errorMessage);
            throw new FileNotFoundException(errorMessage);
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }   
    }

当我在本地运行时,有问题的进程会按预期在前台启动。当它在服务器上运行时,不是那么多。 AppPool设置为与用户'相同的身份。在安装程序的服务器上。我用notepad.exe对此进行了测试,并且该程序存在同样的问题。

1 个答案:

答案 0 :(得分:0)

如果应用程序有GUI并且您想在服务器上启动它,那么有人必须保持登录服务器,以便有一个活动会话来托管/接收该进程。这通常不是理想的情况,但是如果它可以接受,那么追求像NineBerry在问题评论中所链接的东西就是要走的路。如果您不能让用户登录,那么您需要找到一个不同的解决方案,例如该工具的命令行版本,API或从该工具中记录。