2015-07-28 57 views
0

我有一个用C#编写的文件监视服务,需要在检测到文件放置时启动应用程序。我正在使用记事本作为测试应用程序来启动。文件监视器工作正常,但我不能让记事本启动。任何我缺少的帮助都会很棒。在Windows文件监视器服务中启动可执行文件

代码,检测到文件时滴火灾:从app.config中

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); 
     } 

路径参考:

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

我也试过:

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

'Process.Start(“notepad.exe”)为你工作吗? – Luaan

+1

“文件监视服务”:它是一种Windows服务,还是简单的交互式应用程序内的活动? – Richard

+1

通常,服务在与桌面不同的用户环境中运行。你是否检查过任务管理器以查看该进程是否在不同的用户环境中运行? – StingyJack

回答

1

我有档案观看服务,

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

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

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

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

相关问题