【发布时间】:2016-02-22 17:48:37
【问题描述】:
如果某个进程尚未在我们的远程服务器上运行,我需要检查并启动该进程。我遇到的问题是进程作为后台进程启动,这是不希望的。这是我用来启动该过程的代码:
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 对此进行了测试,并且该程序遇到了同样的问题。
【问题讨论】:
-
IIS 无法做到这一点,因为它没有在交互式会话中运行。只有具有交互式会话的登录用户才能执行此操作。
-
@squillman 是否有办法通过代码实现我想做的事情?
-
澄清一下,您是在尝试在客户端机器上启动一个交互式进程,对吧?
-
我正在尝试启动第三方实用程序,在该状态下我可以验证它已完成所需的工作。我假设这与交互式过程相同。除了验证它是否按预期工作之外,我实际上不必与程序进行交互。这能回答你的问题吗?
-
我会研究 WMI 来管理远程机器上的进程:stackoverflow.com/a/2343745/3922214
标签: c#