Articles of .net

我如何等待Windows进程及其subprocess全部退出?

我们有一个启动程序,执行一些设置(启动服务器),启动subprocess,等待(通过工作线程)subprocess退出,然后做一些清理(停止服务器)。 这已经到位,工作正常。 不过,我们的一些应用可以启动其他应用。 例如,启动程序可能启动应用程序A,然后我可以单击启动应用程序B的应用程序A中的button。然后closures应用程序A,启动程序的Process.WaitForExit调用返回,启动程序停止服务器 – 不知道应用程序B仍在运行。 我们只使用启动器进行开发testing,所以这不是一个危机,但是当应用B试图与服务器交谈并崩溃时,这是不方便的。 开始一个subprocess,然后等待它(和它的任何subprocess)退出的最好方法是什么? 这些应用程序(启动器和应用程序都启动)都在.NET中。 如果我必须在每个应用程序中编写特殊的代码(例如打开一个指定的信号量)来完成这个工作,那就好了; 我只是不确定最好的办法。 奖励积分,如果有一些方法只能等待我的应用程序完成 – 例如,如果我的应用程序启动记事本,我不想等待记事本closures; 我只想等待需要服务器的应用程序。 但这不是一个要求,只是一个很好的。

将进程或模块标识为托pipe/本地

可能重复: 如何确定一个过程是否在C#中pipe理? 我如何知道一个进程或模块是以托pipe(.NET)还是以本地编程方式(使用C ++)?

如何使用C#Windows应用程序将字节中的图像写入MS WORD

我试图从FileStream , StreamWriter写入数据到一个word文件。 当数据是文本格式(使用StreamWriter )时,它工作正常。 但是,当我用Binarywriter (用于将文字写入Word文档)尝试相同的方法时, Binarywriter Word文档写入不正确。 在下面的代码中, lstOrderedSpares[index].SparePicture是包含图像数据的字节数组。 我需要一个没有OPENXML的解决scheme。 这是我迄今为止所尝试的: 这里是我的button点击我初始化的数据类和List private void btnCreateQuotation_Click(object sender, EventArgs e) { try { Quotation aQuotation = new Quotation(); aQuotation.QuotationId = quotationId; aQuotation.QuotationDate = lblQuotationDateValue.Text; //Reading from Datagridview and adding to List<Spare> List<Spare> lstOrderedSpares = new List<Spare>(); if (dataGridView1.Rows.Count > 0) { foreach (DataGridViewRow dr in […]

什么时候由.NET进程分配的内存被释放回Windows

安装程序 .NET为分段的每一代堆(0,1,2,LOH)分配内存,以便在启动时获得连续的内存块,并在收集之后尝试满足分配请求。 这个分配给每个堆的内存可能会随着应用程序“升温”而平稳下来,除了第2代和大对象堆以外。 在垃圾收集期间,每个堆(0,1,2)都被扫描和压缩,除了刚刚扫过的大对象堆(LOH)之外。 我理解集合的“扫描”部分意味着GC确定哪些对象不再是根源,并且可用于收集(或定稿),而“紧凑”意味着在堆中仍然活着的地址被重新组织可用的剩余堆有更多可用的连续内存。 由于超过了堆中每个段的预算,.NET将分配另一个段来完成分配(如果可能的话)。 问题 我的问题归结为每个堆中的内存会发生什么情况,而不是由应用程序 (提交)使用,但仍保留.NET? 什么时候释放回操作系统? 。 我相信这是一个过程可能会消耗大量内存的情况(虚拟大小非常大,但是私有字节很小),但是在检查其堆时大部分是可用空间 。 另外需要注意的是,堆的总大小也可能相当小 ,并且不考虑进程消耗的内存。 没有阻塞的终结器,所有看起来都很健康的进程 – 它可能已经运行了几个星期,然后触发监视器警报(例如)。 尝试进一步澄清问题,如果您阅读了Tess .NET内存pipe理 – 餐厅类比 ,如果表是堆段,那么餐厅是否会丢失表(例如,免费的堆段)? 编辑 删除了工作组和鸡只的混淆参考 添加了对Tess餐厅类比的参考

File.Exists对不存在的文件返回true

我正在一个应用程序保存Path.GetDirectoryName(FilePath)中的文件,其中FilePath = Application.ExecutablePath包含一些有关授权的信息。 如果我从VS运行程序,它的工作正常,但如果我做一个安装程序并安装,然后运行它,程序认为该文件已经存在。 我改变了我的程序显示在一个消息框我的FilePath和是否File.Exists(FilePath)返回true或false 。 所以我看了看那条路,启用了隐藏和系统文件,F5'd几次,什么也没有。 该文件不存在,但File.Exists(FilePath)返回true。 任何想法为什么冷这发生,我怎么能解决它? 我正在使用Windows Vista,Visual Studio 2010,C#,并使用VS的安装项目创build了我的安装程序。 编辑:我的path是: C:\ Program Files(x86)\ Helium \ License.xml 。 这是我的代码的一部分: MessageBox.Show("LicenseFileName: " + LicenseFileName); // LicenseFileName: C:\Program Files (x86)\Helium\License.xml System.Diagnostics.Process.Start(LicenseFileName); // Nothing happens MessageBox.Show("File.Exists(LicenseFileName): " + File.Exists(LicenseFileName)); // File.Exists(LicenseFileName): true 忘了说,我已经安装了应用程序之前,所以文件曾经存在。 我使用控制面板卸载。

在Windows资源pipe理器中显示自定义标题或列

我的应用程序添加一些自定义元数据文件 我想要像这样在Windows资源pipe理器中显示它: 或这个: 有没有办法在.NET中做到这一点?

调整窗口大小会导致黑条

我有一个窗体,它在构造函数中设置这些样式: this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 我在Paint事件中绘制了一些矩形。 表单上没有控件。 Hovewer,当我调整表格的大小时,表格的右下方有黑条。 有什么办法摆脱他们? 我已经尝试了一切,在WndProc监听WM_ERASEBKGND ,手动绘制WM_PAINT上的窗体,实现自定义双缓冲区等。还有什么我可以尝试? 我发现这个: https : //connect.microsoft.com/VisualStudio/feedback/details/522441/custom-resizing-of-system-windows-window-flickers ,它看起来像是DWM中的错误,但我只是希望我能做一些解决方法。 请注意,我必须使用双缓冲,因为我想在Paint事件中绘制相当强烈的graphics表示。 我在C#.NET 2.0,Win7中开发。 状态更新1 我设法通过自己实现resizefunction来摆脱大部分黑色条纹。 Hovewer还有一些小毛病。 有没有办法一次resize和paint操作? 这里是我需要做的一个伪代码 : IntPtr hDC; var size = new Size(250, 200); IntPtr handle = API.PaintAndResizeBegin(this.Handle /* Form.Handle */, size.Width, size.Height, out hDC); using (var g = Graphics.FromHdc(hDC)) { this.backBuffer.Render(g, […]

在确定菜单项目的位置时是否有任何标准要遵循?

在开发基于Windows表单的应用程序时,在devise表单的主菜单系统时是否有任何标准? 大多数带有菜单系统的Windows应用程序都将具有标准的File | 编辑| 查看| 工具| 帮助菜单。 你如何确定任何额外的顶级菜单项的位置? 另外,你如何确定子菜单项的位置? 例如,您要遵循什么规则或原则来确定项目是否应放置在“编辑”,“工具”或可能是您自己的非标准顶级菜单中? 我在这里寻找两件事情: 发布的资源(网页或打印),详细说明这个(特别是如果它来自微软),或从UX或UI专业人士的其他材料。 你自己的意见。 基于Gamecat提到Ribbon的响应,我将把它扩展到Ribbon。 你如何确定哪个button出现? 寻找如上所述。 相关问题: https : //stackoverflow.com/questions/126797/is-there-a-style-guide-for-guis-somewhere

如何在Windows中运行应用程序?

如何获得Windows中当前正在运行的应用程序或前台进程的列表? 我的意思是有真正的窗口的应用程序。 不是后台服务/进程。 我想访问任务pipe理器打开时显示的同一个列表。 有没有办法? 任何types的解决scheme都可以接受 无论是一个命令或.NET代码或任何东西。 我只想以编程方式获取该列表。 这甚至可能吗? 我厌倦了任务列表,但它给了我所有的服务和stream程,甚至是后台服务。 有什么逻辑我可以实现?

PowerShell 2.0 sudo的限制

很长时间的读者,但新的海报。 我一直在为这个问题摔跤了一整天,这让我疯狂。 淘了这个网站和谷歌后,我仍然卡住了。 基本上,我无法弄清楚如何在PowerShell中使用Copy-Item CmdLet来实现“sudo”。 这是我的代码: PROFILE.PS1: # Trigger UAC to elevate the supplied command function Elevate-Process() { if($args.Length -eq 0) { error ('USAGE: ' + $MyInvocation.InvocationName + ' <executable> [arg1 arg2 arg3 …]'); } else { try { if($args.Length -eq 1) { Start-Process $args[0] -Verb RunAs; } else { Start-Process $args[0] -ArgumentList $args[1..$args.Length] -Verb […]