我有一个简单的应用程序,可以监视文件夹中的任何更改,如下所示:
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,并在注册表中添加了条目。但是当我尝试启动服务时
sc start <service name>
它显示了“交互式服务检测”消息。
我想避免此消息弹出并启动服务。我也需要在 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。
编辑二
exe启动。必须将服务的属性配置为允许服务与桌面交互,但随后又出现“交互服务检测”消息。