我有一个用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"/>
答案 0 :(得分:1)
我有文件监视服务,
服务在单独的安全上下文中运行到用户登录会话中的进程。
如果您将“会话ID”列添加到“任务管理器”的“进程”选项卡,或者更好地在“进程资源管理器”中,可以看到这一点。
服务启动的任何进程都将在服务自己的上下文中运行:而不是用户。这有很好的安全原因。
要从服务执行交互式操作,您需要在用户上下文中运行的每个用户代理。通常,服务侦听命名管道,并从启动组(或注册表中的Run键)运行用户代理。代理连接到命名管道,并且可以响应来自服务(或来自用户代理的服务)的请求。