背景 我有一个Windows服务使用各种第三方DLL来执行PDF文件的工作。 这些操作可以使用相当多的系统资源,偶尔在发生错误时似乎会遭受内存泄漏。 这些DLL是托pipe在其他非托pipeDLL周围的包装器。 当前解决scheme 我已经通过在专用控制台应用程序中调用某个DLL的调用并通过Process.Start()调用该应用程序来解决此问题。 如果操作失败,并且存在内存泄漏或未释放的文件句柄,则无关紧要。 该过程将结束,操作系统将恢复句柄。 我想将这个相同的逻辑应用到我的应用程序中使用这些DLL的其他地方。 然而,我并不是非常兴奋地为我的解决scheme添加更多的控制台项目,编写更多的调用Process.Start()的样板代码,并分析控制台应用程序的输出。 新解决scheme 一个优雅的替代专用控制台应用程序和Process.Start()似乎是使用AppDomains,像这样: http : //blogs.geekdojo.net/richard/archive/2003/12/10/428.aspx 。 我在我的应用程序中实现了类似的代码,但是unit testing并没有很好的前景。 我创build一个FileStream到一个单独的AppDomain中的testing文件,但不要处置它。 然后我尝试在主域中创build另一个FileStream,并由于未释放的文件locking而失败。 有趣的是,向工作域添加一个空的DomainUnload事件使得unit testing通过。 无论如何,我担心的是,也许创build“工人”AppDomain不会解决我的问题。 思考? 代码 /// <summary> /// Executes a method in a separate AppDomain. This should serve as a simple replacement /// of running code in a separate process via a console app. /// […]
我创build了一个Windows服务与计时器和定时器的触发事件。我创build了一个进程( System.Diagnostics.Process.Start(exe path) ),间隔为5秒。 但是这个过程并没有在事件发生时被创build。 还有其他的方法吗? 提前致谢。 private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Process pr = new Process(); pr.StartInfo.FileName = @"C:\Program Files\Messenger\msmsgs.exe"; pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal; pr.StartInfo.CreateNoWindow = false; pr.Start(); }
如何启动一个进程,比如当用户点击一个button时启动一个URL?
我想从我的Mono / .NET应用程序运行外部命令行程序。 例如,我想运行mencoder 。 可能吗: 获取命令行shell输出,并将其写在我的文本框? 获取数值显示随着时间stream逝的进度条?