Передача строки C # в VBscript - PullRequest
       0

Передача строки C # в VBscript

2 голосов
/ 28 сентября 2011

Я использую форму Windows и пытаюсь передать строку в VBScript.Программа просит пользователя выбрать папку, я пытаюсь взять выбор папки и передать ее в VBScript.

C # Код:

String SelectedFolder = @"C:\Users";

        folderBrowserDialog1.SelectedPath = SelectedFolder;
        if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            //Set selectedFolder equal to the folder that was choosen
            SelectedFolder = folderBrowserDialog1.SelectedPath;
    //Call VBScript
     System.Diagnostics.Process.Start(".vbsPath");

VBScript:

TargetFolder = Request.QueryString("SelectedFolder")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
Set colItems = objFolder.Items
For Each objItem in colItems
objItem.InvokeVerbEx("Print")
Next

Любая помощь будет принята с благодарностью.Спасибо

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

C # сторона

Используйте перегрузку Process.Start, которая принимает параметры командной строки :

System.Diagnostics.Process.Start("C:\path\to\my.vbs", selectedFolder);

Если selectedFolder может содержатьпробелы (что может произойти), вы должны заключить аргумент в кавычки.

System.Diagnostics.Process.Start("C:\path\to\my.vbs", 
    "\"" + selectedFolder + "\"");

На самом деле, если путь может содержать кавычки и / или конечные обратные слэши, экранирование становится намного сложнее, см. этивопросы (и другие) для деталей: Escape-аргументы командной строки в c # , Передача аргументов командной строки в C # .


VBScript сторона

В вашем VBScript прочитайте первый параметр командной строки:

targetFolder = WScript.Arguments.Item(0)
0 голосов
/ 28 сентября 2011

Переход с VBScript на C # туда и обратно добавляет много сложности. Если возможно, было бы действительно легче выбрать один или другой.

В C # вы можете делать все, что можете в VBScript. (То, как вы это делаете, возможно, отличается, но вы можете выполнять все те же задачи - доступ к файлам, доступ к базе данных и т. Д.) Если это возможно, вам, возможно, лучше просто работать в C #.

Я делаю небольшую догадку, основываясь на контексте вопроса здесь, но я пытаюсь ответить в своей голове, почему вы хотите это сделать, и единственное, о чем я могу думать, это что вы не знаете, как отобразить диалоговое окно папки в VBScript, поэтому вы прибегаете к попытке сделать это в C #. Это правильно?

Если это так, вы можете отобразить диалоговое окно папки в VBScript, как показано здесь: http://www.robvanderwoude.com/vbstech_ui_browsefolder.php

0 голосов
/ 28 сентября 2011

Вы можете записать строку в файл, к которому могут получить доступ оба набора кода, или в базу данных.Таким образом, не имеет значения, какой язык программирования вы используете вообще, например, может быть C # для PHP.

Запись файла:

string content = "folder=" + folder;
System.IO.StreamWriter file = new System.IO.StreamWriter(@"c:\config.txt");
file.WriteLine(content);
file.Close();

Чтение файла:

System.IO.StreamReader file = new System.IO.StreamReader(@"c:\config.txt");
string content = file.ReadToEnd();
// extract value of folder setting here
file.Close();

(Конечно, чтение должно быть в VB, но будет очень похожим. Примечание: код основан на: MSDN Пример )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...