2013-09-02 5 views
2

Я пытаюсь создать именованный канал, используя VBScript на win7. Это мой код (взял из there):Ошибка при попытке создать именованный канал с использованием 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: Я нашел другое решение для своей проблемы без использования труб, поэтому мой вопрос немного устарел, но я не знаю, что с ним делать.

+0

Я думаю, что ответ на вопрос, который вы 're referencing предполагает, что труба уже существует –

+0

Я пробовал некоторые случайные имена, но это не помогает. – magras

ответ

0

Я попытался работать с именованным каналом из VBScript. Мне не удалось создать именованный канал на fso.CreateTextFile("\\.\pipe\MyPipe").

Но я успешно соединился с VBScript из с трубкой, созданной классической программе:

Труба была создана таким кодом (паскаль):

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 

И получил сообщение Hello

+0

Спасибо за идею, но я не хочу писать для этого двоичный модуль для wix. – magras

2

Вы c reate именованный канал-сервер под названием «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 
+1

Нужно ли создавать трубу из C/C#/pascal/etc? Я хотел использовать pipe для перенаправления потоков ввода, вывода и ошибок консольного приложения и предположил, что я могу создать канал из VBS. – magras

+0

Да, если вы не можете найти способ создания канала из VBScript. К сожалению, я не могу. – Pakman

Смежные вопросы