从Windows文件观察器服务中启动可执行文件

时间:2015-07-28 12:35:16

标签: c# windows-services

我有一个用C#编写的文件监视服务,我需要在检测到文件丢弃时启动一个应用程序。我正在使用记事本作为测试应用程序来启动。文件观察器工作正常,但我无法启动记事本。对我所缺少的任何帮助都会很棒。

检测到文件丢弃时触发的代码:

public void FileCreated(object source, FileSystemEventArgs inArgs)
        {
            Process LaunchApp = new Process();
            LaunchApp.StartInfo.FileName = ConfigurationManager.AppSettings["AppStartPath"];
            LaunchApp.Start();
           // Process.Start(ConfigurationManager.AppSettings["AppStartPath"]);
            Log.WriteLine(" File added: " + DateTime.Now + " " + inArgs.FullPath);
        }

来自app.config的路径引用:

<add key="AppStartPath" value="Notepad.exe"/>

我也尝试过:

<add key="AppStartPath" value="C:\Windows\System32\Notepad.exe"/>

1 个答案:

答案 0 :(得分:1)

  

我有文件监视服务,

服务在单独的安全上下文中运行到用户登录会话中的进程。

如果您将“会话ID”列添加到“任务管理器”的“进程”选项卡,或者更好地在“进程资源管理器”中,可以看到这一点。

服务启动的任何进程都将在服务自己的上下文中运行:而不是用户。这有很好的安全原因。

要从服务执行交互式操作,您需要在用户上下文中运行的每个用户代理。通常,服务侦听命名管道,并从启动组(或注册表中的Run键)运行用户代理。代理连接到命名管道,并且可以响应来自服务(或来自用户代理的服务)的请求。