我需要将数据从一个进程发送到另一个进程。约束条件:
发送者进程调用开销很大。这需要使用vbscipt来完成。对于发送方进程,此数据传输是一个额外的work.It,不应受此功能的太大影响。在4-5分钟内,发送者进程中大约有1000个线程。
更快的进程间通信是important.If,它可以异步完成,这样会更好。我读到了关于命名pipe.Is的文章,使用vbscript打开命名管道是可能的,考虑到上面的约束,.Also是否还有其他可能的方法。
发布于 2012-06-08 13:37:10
使用命名管道可能是原生VBScript的唯一选择。您可以通过用某种其他语言编写COM对象来访问任何其他IPC方法。
命名管道可以像文件一样写入,因此您可以使用FileSystemObject打开命名管道并对其进行读/写。打开命名管道的格式是使用\\\\.\pipe\PipeName格式(用管道的实际名称替换PipeName )。
因此,要在VBScript中写入命名管道:
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("\\.\pipe\PipeName", True)
a.WriteLine("This is a test.")
a.Close发布于 2013-03-13 10:20:41
Option Explicit
Dim g_receivedCallback
If WScript.Arguments.Named.Exists("NEW") Then
RunSecondInstance
Else
RunFirstInstance
End If
Sub RunSecondInstance()
Dim oSa, oWindow, oData, oCallback
' Search for the window
Set oSa = CreateObject("Shell.Application")
For Each oWindow In oSa.Windows
If TypeName(oWindow.Document) = "HTMLDocument" Then
If InStr(oWindow.Document.Title, "IPC Window") > 0 Then
' Get the data object, set a property and callback a method
Set oData = oWindow.GetProperty ("IPCData")
Set oCallback = oData.Callback
oData.Value = "Success!"
Call oCallback
End If
End If
Next
End Sub
Sub RunFirstInstance()
Dim oData, oIe, oWs
' Create a object to pass to a other script
Set oData = New IPCData
' Set a property to a callback method
Set oData.Callback = GetRef("MyCallback")
' Create a window and store the data in the window
Set oIe = CreateObject("InternetExplorer.Application")
oIe.Navigate "about:blank"
Do Until oIe.ReadyState = 4 : WScript.Sleep 5 : Loop
oIe.Document.Title = "IPC Window"
oIe.PutProperty "IPCData", oData
' Run second script instance
Set oWs = CreateObject("WScript.Shell")
oWs.Run "WSCRIPT.EXE """ & WScript.ScriptFullName & """ /NEW"
' Wait for callback from second script
Do Until g_receivedCallback = True : WScript.Sleep 5 : Loop
' Display received data
MsgBox oData.Value
' Close ie
oIe.Quit
End Sub
Sub MyCallback()
g_receivedCallback = True
End Sub
Class IPCData
Private m_callback
Public Property Get Callback()
Set Callback = m_callback
End Property
Public Property Set Callback(ByVal v)
Set m_callback = v
End Property
Private m_value
Public Property Get Value()
If IsObject(m_value) Then
Set Value = m_value
Else
Value = m_value
End If
End Property
Public Property Let Value(ByVal v)
m_value = v
End Property
Public Property Set Value(ByVal v)
Set m_value = v
End Property
End Classhttps://stackoverflow.com/questions/10943464
复制相似问题