SECURITY_ATTRIBUTES什么时候变的?为什么?我有一些使用P/Invoke启动进程并捕获标准输出的代码。(关于我们为什么使用P/Invoke而不是System.Diagnostics.Process执行此操作的故事冗长且令人费解;足以说这是一项要求。)它已经在高负载下生产了将近一年,并且测试运行它总是被通过。今天早上虽然我进行了测试但他们失败了。我不能确定我最后一次测试是在今天早上之前(2014年5月15日),但我相信那是2014年4月24日。测试通过了,但今天早上失败了。我收到了“PInvokeStackImbalance”错误消息,所以我做了一些研究,最终意识到extern方法(本例中为CreatePipe)使用的结构之一的签名不正确。我改变了,测试又开始了。我很高兴找到了解决方案,但我担心部署问题。为什么结构的签名会改变?我没有升级我的操作系统或任何东西——我在4月24日运行Windows7x64,现在我仍在运行它。(部署环境是WindowsServer2012。)从那以后我安装(和卸载)了一些应用程序,但它们是轻量级的第三方工具,而不是微软或系统组件。我假设WindowsUpdate修复程序是负责的,但我不知道是哪一个。明确地说,在我自己的代码中,我更改的是:[StructLayout(LayoutKind.Sequential)]公共IntPtrlpSecurityDescriptor;公共布尔bInheritHandle;}对此:[StructLayout(LayoutKind.Sequential)]内部类SECURITY_ATTRIBUTES{publicintnLength=12;publicIntPtrlpSecurityDescriptor=IntPtr.Zero;公共布尔bInheritHandle;我需要确保为使代码在我的机器上运行所做的更改在部署到生产应用程序时不会中断。有谁知道如何识别需要更改的内容以及如何确定生产环境是否需要更改?编辑:这里是打开管道到标准输出的代码:privatePipeInfoCreatePipe(){PipeInfopipeInfo=newPipeInfo();安全文件句柄safeFileHandle=null;尝试{Native.SECURITY_ATTRIBUTESpipeAttributes=newNative.SECURITY_ATTRIBUTES();如果(!Native.CreatePipe(outsafeFileHandle,outpipeInfo.ChildHandle,pipeAttributes,0)||safeFileHandle.IsInvalid||pipeInfo.ChildHandle.IsInvalid){thrownewWin32Exception();}if(!Native.DuplicateHandle(newHandleRef(this,Native.GetCurrentProcess()),safeFileHandle,newHandleRef(this,Native.GetCurrentProcess()),outpipeInfo.ParentHandle,0,false,2)){thrownewWin32Exception();}}finally{if(safeFileHandle!=null&&!safeFileHandle.IsInvalid){safeFileHandle.Close();}}返回管道信息;我不太同意这段代码,我主要是从.NETReferenceSource中提取它只是为了阐明时间线:以上是C#学习教程:SECURITY_ATTRIBUTES何时更改?为什么?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
