我有一个简单的应用程序,可以监视文件夹中的任何更改,如下所示:
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;消息即将到来。
答案 0 :(得分:2)
您必须将Windows服务重新架构为两部分 - 无GUI服务流程和在用户桌面上运行的单独UI应用程序。服务可以通过多种方式与UI应用程序进行通信。这些SO问题将帮助您入门:
没有别的办法。顺便说一句,您现有的方法已经被打破 - 对于非管理员用户和远程桌面会话 - 即使他们愿意,他们也不会从服务中看到UI。