سؤال

وأنا في حاجة لاستدعاء فبسكريبت (والملحق .vbs الملف) ملف في طلبي C # ويندوز . كيف يمكنني أن أفعل هذا؟

وهناك وظيفة الإضافية للوصول إلى ملف VBScript في Visual Studio. ولكني في حاجة للوصول إلى البرنامج النصي في التعليمات البرمجية خلف. كيفية القيام بذلك؟

هل كانت مفيدة؟

المحلول

والتعليمة البرمجية التالية سيتم تنفيذ البرنامج النصي ل VBScript مع أي مطالبات أو أخطاء وليس قذيفة الشعار.

System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\scripts\vbscript.vbs");

وهناك تقنية أكثر تعقيدا سيكون الاستخدام:

Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript"; 
scriptProc.StartInfo.WorkingDirectory = @"c:\scripts\"; //<---very important 
scriptProc.StartInfo.Arguments ="//B //Nologo vbscript.vbs";
scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up
scriptProc.Start();
scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit
scriptProc.Close();
<ع> استخدام خصائص StartInfo سوف اعطيكم الوصول محبب جدا إلى الإعدادات العملية.

وتحتاج إلى استخدام ويندوز سيناريو المضيف إذا أردت النوافذ، الخ ليتم عرضه بواسطة البرنامج النصي. يمكنك أيضا أن مجرد محاولة تنفيذ cscript مباشرة ولكن على بعض الأنظمة سيكون مجرد إطلاق المحرر:)

نصائح أخرى

وثمة نهج آخر هو إنشاء مشروع مكتبة فئة VB.NET، نسخ التعليمات البرمجية VBScript الخاص بك إلى ملف فئة VB.NET، والرجوع إلى مكتبة الفئات VB.NET من C # البرنامج.

وسوف تحتاج لإصلاح ما يصل أي اختلافات بين VBScript و VB.NET (يجب أن تكون قليلة).

والميزة هنا، هو أنك لن تشغيل التعليمات البرمجية في العملية.

وهذه هي مشكلة أذونات. يجب أن يكون appPool التطبيق الخاص بك يعمل على أعلى مستوى الإذن للقيام بذلك في عام 2008. ويجب أن تكون هوية المسؤول.

هل تعني محاولة تشغيل ملف فبس من C #؟

ويمكن القيام به مثل <وأ href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(VS.80).aspx" يختلط = "نوفولو noreferrer" > تشغيل أي برنامج آخر من C # رمز :

Process.Start(path);

ولكن لديك للتأكد من أنها لن تسأل عن أي شيء، وكان يعمل مع الإصدار سطر الأوامر للمترجم:

Process.Start("cscript path\\to\\script.vbs");

لفائدة الباحثين، لقد وجدت هذا <وأ href = "https://social.microsoft.com/Forums/en-US/9f5505d3-ab39-4f66-9ce5-95a7af432d22/passing-a-parameter-from -AC شكل لواحد في فبسكريبت وقابلة للتنفيذ البرنامج النصي؟ المنتدى = Offtopic "يختلط =" نوفولو "> آخر ، الذي يعطي إجابة واضحة (خاصة إذا كان لديك المعلمات). وقد اختبرت ذلك - يبدو أن تعمل بشكل جيد

string scriptName = "myScript.vbs"; // full path to script
int abc = 2;
string name = "Serrgggio";

ProcessStartInfo ps = new ProcessStartInfo();
ps.FileName = "cscript.exe";
ps.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\"", scriptName, abc, name);
//This will equate to running via the command line:
// > cscript.exe "myScript.vbs" "2" "Serrgggio"
Process.Start(ps);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top