在窗口7中打开exe作为服务而没有“交互式服务检测”消息

时间:2013-01-17 14:22:38

标签: windows-services exe

我有一个简单的应用程序,可以监视文件夹中的任何更改,如下所示:

            private void Form1_Load(object sender, EventArgs e)

>         {
>             FileSystemWatcher w = new FileSystemWatcher();
>             w.Path = @"C:\temp";
>             w.Changed += new FileSystemEventHandler(OnChanged);
>             w.Created += new FileSystemEventHandler(OnChanged);
>             w.Deleted += new FileSystemEventHandler(OnChanged);
>             w.Renamed += new RenamedEventHandler(OnChanged);
>             // Begin watching.
>             w.EnableRaisingEvents = true;
        }
    // Define the event handlers. 
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
        MessageBox.Show("File: " + e.FullPath + " " + e.ChangeType + Path.GetFileName(e.FullPath));
    }

我在命令提示符中添加了与服务相同的内容

  sc create <service name> binPath= <path of the exe file>

这在服务中添加了exe,并在Registry中创建了条目。但是当我尝试启动服务时

sc start <service name>
它出现了#34;互动服务检测&#34;消息。

我想避免弹出这个消息并启动服务。 我还需要在c#中完成此操作,但如果有人知道在cmd中执行此操作,我可以将其添加为批处理文件并执行相同的操作。

编辑我

正如@Seva建议我创建了一个调用我希望的exe的服务。我编写了以下代码来启动服务启动时的exe:

    protected override void OnStart(string[] args)
    {

        base.OnStart(args);
        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerAsync();

    }
    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        p.StartInfo.CreateNoWindow = false;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
        p.StartInfo.WorkingDirectory = @"<my exe path>";
        p.StartInfo.FileName = "<myexe.exe>";
        p.StartInfo.Arguments = @"<my exe path>";
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        p.WaitForExit();
        base.Stop();
    }

我成功安装了服务但是在启动时没有启动exe。

编辑II

exe开始了。该服务的属性必须配置为允许与桌面进行服务交互,然后再次进行“交互式服务检测”#34;消息即将到来。

1 个答案:

答案 0 :(得分:2)

您必须将Windows服务重新架构为两部分 - 无GUI服务流程和在用户桌面上运行的单独UI应用程序。服务可以通过多种方式与UI应用程序进行通信。这些SO问题将帮助您入门:

没有别的办法。顺便说一句,您现有的方法已经被打破 - 对于非管理员用户和远程桌面会话 - 即使他们愿意,他们也不会从服务中看到UI。