2012-03-06 5 views
6

यह मेरा कार्यक्रम से कोड का एक snipet है। मुझे पता है कि यह कोड वीबीस्क्रिप्ट में काम करता है लेकिन मैं इसे vb.net के साथ काम करने की कोशिश कर रहा हूं। क्या गलत हो रहा है?WScript?</p> <pre><code>WSHShell = WScript.CreateObject("WScript.Shell") </code></pre> <p>लेकिन किसी कारण से, "WScript" घोषित नहीं किया गया है:

+0

एरिक लिपर्ट के ब्लॉग की जांच करें http://blogs.msdn.com/b/ericlippert/archive/2003/10/08/53175.aspx – volody

+0

@ वोलोडी एक दिलचस्प पोस्ट है लेकिन मैं अभी भी जानना चाहता हूं कि कैसे अनुकूलित करना है मेरा कोड vb.net – user1196604

+0

पर आप स्क्रिप्ट को अलग प्रक्रिया – volody

उत्तर

10

WScript ऑब्जेक्ट विंडोज स्क्रिप्ट होस्ट के लिए विशिष्ट है और .NET Framework में मौजूद नहीं है।

असल में, WScript.Shell ऑब्जेक्ट कार्यक्षमता सभी .NET Framework कक्षाओं में उपलब्ध है। इसलिए यदि आप VB.NET को VBScript कोड पोर्ट कर रहे हैं, तो आपको Windows स्क्रिप्ट होस्ट COM ऑब्जेक्ट्स का उपयोग करने के बजाय .NET कक्षाओं का उपयोग करके इसे फिर से लिखना चाहिए।


यदि किसी कारण से, आप COM ऑब्जेक्ट्स का उपयोग करना पसंद करते हैं, तो आपको अपने ऑब्जेक्ट में इन ऑब्जेक्ट्स को उपलब्ध कराने के लिए अपने प्रोजेक्ट में उपयुक्त COM लाइब्रेरी संदर्भ जोड़ना होगा। WScript.Shell के मामले में, यह % WinDir% \ System32 \ wshom.ocx (या % 64-बिट विंडोज़ पर WinDir% \ SysWOW64 \ wshom.ocx) है। तो फिर तुम इस तरह कोड लिख सकते हैं:

Imports IWshRuntimeLibrary 
.... 
Dim shell As WshShell = New WshShell 
MsgBox(shell.ExpandEnvironmentStrings("%windir%")) 


वैकल्पिक रूप से, आप

Activator.CreateInstance(Type.GetTypeFromProgID(ProgID)) 

का उपयोग कर COM ऑब्जेक्ट का उदाहरण बना सकते हैं और फिर लेट बाइंडिंग का उपयोग कर उन लोगों के साथ काम करते हैं। इस तरह, उदाहरण के * के लिए:

Imports System.Reflection 
Imports System.Runtime.InteropServices 
... 

Dim shell As Object = Nothing 

Dim wshtype As Type = Type.GetTypeFromProgID("WScript.Shell") 
If Not wshtype Is Nothing Then 
    shell = Activator.CreateInstance(wshtype) 
End If 

If Not shell Is Nothing Then 
    Dim str As String = CStr(wshtype.InvokeMember(
     "ExpandEnvironmentStrings", 
     BindingFlags.InvokeMethod, 
     Nothing, 
     shell, 
     {"%windir%"} 
    )) 
    MsgBox(str) 

    ' Do something else 

    Marshal.ReleaseComObject(shell) 
End If 

* मैं VB.NET में अच्छी तरह से पता नहीं है, इसलिए इस कोड बदसूरत हो सकता है; सुधार करने के लिए स्वतंत्र महसूस करें।

+2

+1, लेकिन नीचे दिए गए अनुशंसा को शायद शीर्ष पर बनाया जाना चाहिए, जहां इसे याद नहीं किया जा सकता है! –

+0

@ कोडी: हो गया। धन्यवाद! – Helen

संबंधित मुद्दे