2012-03-06 24 views
6

Bu benim programdan kod parçası, mikroişlemciyi olduğunu. Bu kodun VBScript'te çalıştığını biliyorum, ancak bunu bc.net ile çalışmaya çalışıyorum. Neyin yanlış gidiyor?WScript? <pre><code>WSHShell = WScript.CreateObject("WScript.Shell") </code></pre> <p>Ama nedense</p>, "WScript" ilan edilmez:

+0

Eric Lippert'in Blog'una bakın http://blogs.msdn.com/b/ericlippert/archive/2003/10/08/53175.aspx – volody

+0

@volody ilginç bir yazı ama yine de nasıl uyarlanacağını bilmek istiyorum kodumu vb.net – user1196604

+0

kodunuzu ayrı bir işlem olarak çalıştırabilirsiniz – volody

cevap

10

WScript nesnesi, Windows Komut Dosyası Barındırıcısına özgüdür ve .NET Framework'te bulunmamaktadır.

Aslında, tüm WScript.Shell nesne işlevselliği .NET Framework sınıflarında kullanılabilir. Bu nedenle, VBScript kodunu VB.NET'e taşıyorsanız, Windows Komut Dosyası Ana Bilgisayarı COM nesnelerini kullanmak yerine .NET sınıflarını kullanarak yeniden yazmanız gerekir.


nedense, yine de COM nesneleri kullanmayı tercih ederse

, sen uygulamanız için kullanılabilir bu nesneleri sahip olmak için projenize uygun COM kitaplığı başvurular eklemeniz gerekir. WScript.Shell durumunda, % WinDir% \ System32 \ wshom.ocx (veya 64-bit Windows üzerinde % WinDir% \ SysWOW64 \ wshom.ocx).

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


Alternatif olarak,

Activator.CreateInstance(Type.GetTypeFromProgID(ProgID)) 

kullanarak COM nesnelerinin örneklerini oluşturabilir ve daha sonra geç bağlama kullanarak onlarla çalışmak: Sonra böyle bir kod yazabilirsiniz. Bunun gibi, örneğin * için:

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 

ben de VB.NET bilmiyorum *, bu nedenle bu kod çirkin olabilir; geliştirmek için çekinmeyin.

+2

+1, ancak altta yaptığınız tavsiyenin muhtemelen gözden kaçırılmaması gereken en üstte yapılması gerekir! –

+0

@Cody: Bitti. Teşekkürler! – Helen

İlgili konular