Tag: ipc

向父进程发信号通知子进程已完全初始化

我正在启动一个公开WCF端点的子进程。 如何从子进程向父进程发出信号,表明子进程已完全初始化并且现在可以访问端点? 我想过为此目的使用信号量,但无法弄清楚如何实现所需的信号。 string pipeUri = “net.pipe://localhost/Node0”; ProcessStartInfo startInfo = new ProcessStartInfo(“Node.exe”, “-uri=” + pipeUri); Process p = Process.Start(startInfo); NetNamedPipeBinding binding = new NetNamedPipeBinding(); var channelFactory = new ChannelFactory(binding); INodeController controller = channelFactory.CreateChannel(new EndpointAddress(pipeUri)); // need some form of signal here to avoid.. controller.Ping() // EndpointNotFoundException!!

为什么无法获取启动进程的主窗口句柄?

我有一种情况,我在我的代码中启动一个进程,以便建立一个IPC通道。 我正在开始的过程是一个没有CLR支持的MFC应用程序。 我开始这个过程的应用程序是WPF应用程序中的C#模块(我认为这不是我的问题的结果)。 这适用于支持CLR的应用程序版本,它适用于除部署目标之外的每台计算机,Windows 7的触摸屏计算机。但出于某种原因,当我尝试使用此确切方案时,Process对象永远不会解析主窗口句柄( Process.MainWindowHandle )。 这样做还有另一种(甚至是pinvoke)方法吗? 这是安全的事吗? 我是那个盯着这个过程的人。 进程的主窗口句柄确实存在。 我看不出有什么不对。 如果有帮助,这是我的代码。 _applicationProcess = new Process(); _applicationProcess.StartInfo.FileName = _strProcessPath; _applicationProcess.StartInfo.Arguments = _strProcessArguments; _applicationProcess.Start(); long nTicks = Environment.TickCount; if (_applicationProcess.WaitForInputIdle(1 /*minute(s)*/ * 60000)) { try { do { // Don’t let total processing take more than 1 minute(s). if (Environment.TickCount > nTicks + 1 /*minute(s)*/ […]

为什么我在20%繁忙的机器上得到IPC延迟

我在一台拥有10个内核且运行47个ClientApp实例的机器上的IPC出现延迟,这些实例都与MasterApp通信。 我偶尔会遇到严重的延迟。 这是我的日志的一部分。 左边的DateTime是日志DateTime(高性能记录器)。 []中的DateTimes是从MasterApp发送消息的时间。 每条消息都以@结尾。 所以第一条消息仅落后1毫秒,但最后消息落后71毫秒。 任何可能导致这种情况的想法以及我可以做些什么来消除延迟 20141030T120401.015 [——–*MD|USD/JPY 109.032 109.034 1000000.00 1000000.00 20141030T120401014@] 20141030T120401.084 [——–*MD|EUR/CHF 1.20580 1.20588 3000000.00 2000000.00 20141030T120401019@] 20141030T120401.163 [——–*MD|USD/JPY 109.031 109.034 1000000.00 1000000.00 20141030T120401088@*MD|EUR/CHF 1.20580 1.20588 3000000.00 1000000.00 20141030T120401092@] 代码摘录: public void Connect(int port) { IPAddress[] aryLocalAddr = null; String strHostName = “”; try { // NOTE: DNS lookups are […]

ipc使用Shared和全局MMF

使用MMF和C#我在2个进程之间创建了一个共享内存。 我的目标是将其创建为全局说长度为4000字节并创建分区 所以Main proj是“MainProj”将启动MMF名为”$AppName$_sharedMMF” 那么“Debugger Proj”将访问”$AppName$_sharedMMF”因此访问者位置是: MainProj->Debugger : readAddr = 0 , writeAddr = 250 Debbugger->MainProj : reafAddr = 250, writeAddr = 0 然后我解决方案中的第三个可执行文件将是 //setter getter MainProj->AnotherExe : readAddr = 251 , writeAddr = 500 //setter getter EnotherExe->MainProj : reafAddr = 500, writeAddr = 251 我面临的问题是,我希望mainProj成为MMF的全局实例 所以每次我想访问分区我都会使用相同的静态类和方法 //accessed by main project SharedSetter(SelectedGetter, Data) 1)因为它由多个线程共享它有点复杂,虽然添加分区并不像整个设置那样复杂,这是一个坏主意吗? 2)我是否真的不能跳过mmf的创建新实例步骤并将其保留为“Alive”并仅创建新的访问器? […]

我们如何使用共享内存段与两个托管进程之间的“对象”共享数据?

如何使用共享内存段在两个托管进程之间共享数据? 我在C ++ / CLI代码中使用”object”来与其他进程中的其他内存部分共享数据。 我正在使用以下代码段。 #define BUFFER_SIZE 32768 #pragma data_seg (“.SHAREDMEMORY”) bool _Locked = false; bool _Initialized = false; unsigned char[10000] data = NULL; #pragma data_seg() #pragma comment(linker,”/SECTION:.SHAREDMEMORY,RWS”) 但我需要它: #pragma data_seg (“.SHAREDMEMORY”) bool _Locked = false; bool _Initialized = false; object^ _object = nullptr; #pragma data_seg() #pragma comment(linker,”/SECTION:.SHAREDMEMORY,RWS”) 它说”global or static variable may not […]

有没有办法将消息从C#.NET程序集(ActiveX)发送到VB6应用程序?

此问答指的是并且可以用于foll。 用途: 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从ActiveX DLL发送消息到vb6应用程序 将消息从C#.net(dll)发送到vb6应用程序 我读过这篇文章,但似乎并不十分清楚我的目的…… 我还提到了这篇文章来创建ActiveX对象并实现了一个ActiveX dll,我从浏览器调用它来在客户端启动应用程序.dll检查VB6 exe(进程)是否正在运行,否则运行exe。 如果exe已经运行,那么我想将参数/消息传递给exe应用程序。 但我无法获得解决方案或参考样本来实现从此C#.NET程序集(ActiveX)向VB6应用程序发送消息的方法…我可以访问.NET和VB6应用程序的源代码。 .. 我尝试过使用: – Process[] processes = Process.GetProcessesByName(“MyProgram”); foreach (Process p in processes) { IntPtr pFoundWindow = p.MainWindowHandle; // how do I pass a value to MyProgram.exe ? // } 我也试过这个:使用以下链接的帮助,但这不是我正在寻找的解决方案!: – e [C#]在其他程序上读取/写入文本框此代码已在我的activeX DLL上实现,它启动了VB6 App ..我正在通过.NET(进程)检查exe是否正在运行,如果没有,则启动它。 如果exe正在运行,那么我使用上面的文章代码示例通过设置控件(mycase中的文本框)向vb6应用程序发送消息…非常有用的代码..以下代码复制自: – c#reading&writing textbox在其他计划上 public class […]

从.NET 4.0(VS2010)项目中,如何在.NET 1.1中定位API?

我使用.NET 4.0中的3d-party库在C#.NET 4.0中开发了程序,现在我被要求定位仅在.NET 1.1中具有API的3d-party程序 我忽略了以前的一些讨论,告诉我这是不可能的: 适用于Visual Studio 2010的 MSDN .NET Framework多目标包 那么我仍然可以在VisualStudio 2010中定位.NET Framework 1.1吗? 等等 这很奇怪,我无法从.NET(4.0)中使用以前的.NET。 文章: 在Visual Studio 2008和Team Server中使用.NET 1.1 讲述: “这里是如何使用最新的IDE来使用.NET 1.1应用程序。” 它适用于VS2010(和VS2012)吗? 从.NET 4.0(VS2010)项目中针对.NET 1.1中的API有哪些可能性? 进程间通信? 更新: @HighCore, 这是一个程序(终端),提供对西方交易证券交易所的访问,需要登录和加密密钥才能通过互联网获取数据并提交订单(买入,卖出等)。 我的程序是在.NET 4.0中对机器人进行协商,但终端本质上也总是从Windows / GUI手动使用 我无法直接访问证券交易所或干预提供它的程序和库:)或者更确切地说:( UPDATE2: 我甚至没有在我的Windows XP SP3机器上找到.NET 1.1。 Windows更新似乎没有得到它。 我还记得上次我安装.NET 1.1时,我不得不重新安装VS2005,VS2008,带有Service Pack的VS2010和所有依赖项…. 也就是说,我觉得有必要在以后的版本之前安装.NET 1.1吗?

如何从Win32句柄获取System.Windows.Form实例?

以下代码实现了一个简单的单例,确保只能运行我的应用程序的一个实例。 但是,如果启动了另一个实例,我需要能够获取该实例的命令行参数,将它们传递给初始实例,然后终止第二个实例。 当我试图获取应用程序的第一个实例时,会出现此问题。 一旦我找到该实例的主窗体的句柄,我将它传递给Control.FromHandle()方法,期望得到一个MainForm 。 相反,返回值始终为null 。 ( Control.FromChildHandle()给出相同的结果。) 因此,我的问题很简单:我做错了什么? 这在.NET中甚至可能吗? public class MainForm : Form { [DllImport(“user32”)] extern static int ShowWindowAsync(IntPtr hWnd, int nCmdShow); [DllImport(“user32”)] extern static bool SetForegroundWindow(IntPtr hWnd); private Mutex singletonMutex; private void MainForm_Load(object sender, EventArgs e) { bool wasCreated; singletonMutex = new Mutex(false, Application.ProductName + “Mutex”, out wasCreated); // returns false […]

从内存映射文件中读取问题

我试图在我的应用程序(特别是Windows服务)中实现内存映射文件,然后使用C#表单从服务写入的MMF读取。 不幸的是,我似乎无法从MMF中读取任何内容,更重要的是,表单似乎永远不会找到服务创建的MMF。 下面是代码片段,概述了我在做什么,任何人都可以看到我做错了什么或能够指出我更好的方向? 服务: private MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen(“AuditStream”, 1024 * 1024); private Mutex mutex = new Mutex(false, “MyMutex”); byte[] msg = new byte[1]; var view = mmf.CreateViewStream(0, 1); byte[] rmsg = new byte[1]; for (int i = 0; i < 400; i++) { mutex.WaitOne(); for (int j = 0; j < msg.Length; j++) { […]

如何在Windows服务之间进行通信

我有2个使用C#创建的Windows服务。 我想在第二个Windows服务中调用一个函数的服务之一。 我该怎么办? 编辑: 问题是我必须运行应用程序(我不需要它们而不是服务进程也很好)但我需要这个2应用程序进行通信,这2个应用程序在同一台服务器上,