2

我正在尝试在 win7 上使用 VBScript 创建命名管道。这是我的代码(取自那里):

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("\\.\pipe\PipeName", True)
a.WriteLine("This is a test.")
a.Close

但我得到了一个错误(手动翻译,所以可能不准确):

test.vbs(2, 1) Microsoft VBScript runtime error: File not found

与普通文本文件相同的代码可以正常工作:

Set a = fs.CreateTextFile(".\\PipeName", True)

但是,当我试图逃避反斜杠时:

Set a = fs.CreateTextFile("\\\\.\\pipe\\PipeName", True)

我有:

test.vbs(2, 1) Microsoft VBScript runtime error: Path not found

UPD:我以管理员身份运行脚本。

UPD2:我为我的问题找到了另一种不使用管道的解决方案,所以我的问题有点过时了,但我不知道该怎么做。

4

2 回答 2

2

您是否创建了一个名为“PipeName”的命名管道服务器?此代码适用于我(我将管道命名为“HelloWorld”):

C# 服务器:

static void Main(string[] args)
{
    using (var pipe = new NamedPipeServerStream("HelloWorld"))
    {
        pipe.WaitForConnection();
        StreamReader reader = new StreamReader(pipe);
        var line = reader.ReadLine();
        Console.WriteLine(line);
    }
    Console.ReadLine();
}

VBScript 客户端:

Dim fs, pipe
Set fs = CreateObject("Scripting.FileSystemObject")
Set pipe = fs.OpenTextFile("\\.\pipe\HelloWorld", 8, False, 0)
pipe.WriteLine("This is my message")
pipe.Close
于 2014-09-04T15:02:34.847 回答
0

我尝试使用来自 VBScript 的命名管道。我未能通过fso.CreateTextFile("\\.\pipe\MyPipe").

但是我从经典应用程序创建的管道成功地从 VBScript 连接:

管道是由这样的代码(pascal)创建的:

procedure OpenTestPipe;

var
 i,hOut: Integer;

begin

  hOut:=CreateNamedPipe('\\.\pipe\Test.htm',PIPE_ACCESS_OUTBOUND,PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,1024,1024,NMPWAIT_USE_DEFAULT_WAIT,nil);

  i:=FileWrite(hOut,'Hello'#13#10,7);

MessageBox(0,'Pipe is opened','Pipe sample',0);

  FileClose(hOut);

end;

当显示 MessageBox 时,我打开了 VBScript

Set fso = CreateObject("Scripting.FileSystemObject")

MsgBox fso.OpenTextFile("\\.\pipe\test.htm",1).readLine

并收到一条消息你好

于 2013-11-22T09:17:53.957 回答