.NET framework 标准类库如何在VBScript中使用,注意不是VB.NET,是VBS

DanielYWoo 2008-03-04 05:10:37
现在我自己对一个WSDL生成VB.NET的代理代码,然后生成一个COM可视的DLL,我成功的注册并可以在我的VBScript中调用,比如:
Set service = CreateObject("ProblemManagementService.ProblemManagement")
service.UseDefaultCredentials = False
service.PreAuthenticate = True
service.UnsafeAuthenticatedConnectionSharing = False

但是对于.NET 类库的标准组件,比如System.Net.NetworkCredential我确无法创建,比如:
Set credentials = CreateObject("System.Net.NetworkCredential")
credentials.UserName = "falcon"
credentials.Password = "dragon"
就会报错:
C:\>cscript 1.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

C:\1.vbs(6, 1) Microsoft VBScript runtime error: ActiveX component can't create object: 'System.Net.NetworkCredential'

今天第一天学VB.NET,VBScript也只有看过几天,请问哪位达人知道如何VBScript中调用.NET类库?谢谢!
...全文
502 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
打开注册表看HKEY_CLASSES_ROOT,这些注册过的都可以调用的
你会发现System.Net这个namespace下的所有类都没有在注册表中,所以都不能调用
不明白就是这个,为什么这些都没有注册,如果我手工注册了会不会对系统造成影响,比如安全方面
vrhero 2008-03-05
  • 打赏
  • 举报
回复
你这个问题太冷门了...
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
期待高手一句话中。。。。
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
to HimeTale
这个文档是最基础的介绍,没有用的

to vrhero
这个和安全性没有关系,主要问题是System.Net.NetworkCredential是属于.NET Framework全集,而System.Collections.Queue属于.NET Framework Compact子集。
目前我看到的只要是Compact子集之外的类都无法从COM方式暴露给VBScript

我的问题就是对于Compact之外的.NET类如何在VBScript中使用

我以前不做Windows平台的,不太了解MS的技术,但是直觉告诉我貌似这应该是一个很简单的问题,或许高手一句话就解决了
vrhero 2008-03-05
  • 打赏
  • 举报
回复
可能是有意这么做的...WSH太危险...而System.Net.NetworkCredential涉及系统安全性...
wanabe 2008-03-05
  • 打赏
  • 举报
回复
uo
HimeTale 2008-03-05
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconExposingNETFrameworkComponentsToCOM.asp
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
有些.NET标准类是可以用的,比如
set coll = CreateObject("System.Collections.Queue")

但是这个就不行,比如
set cred = CreateObject("System.Net.NetworkCredential")

我问的是如何解决后者
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
楼上的几位没看清楚我的意思,我自己的DLL就是暴露为COM然后这样在VBScript用的,这个没有问题的。我的问题是如何在VBScript中使用Set credentials = CreateObject("System.Net.NetworkCredential") 这个NetworkCredential我没有办法改变暴露方式的,这个是.NET的标准类库。
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
而且这个还是有限制的,不能有console输出,不能有UI操作
是workflow里的
问题已经有别的更好的办法了,只是这个问题本身还是没有解决
我是不是太较真了?呵呵
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
楼上的,我不能用PSH
因为我在做Mercury QualityCenter和HP OpenView ServiceManager的集成,QC使用VBScript hook对SM对SOAP调用。
水如烟 2008-03-05
  • 打赏
  • 举报
回复
Windows PowerShell

Help New-Object -full


名称
New-Object

摘要
创建 .Net 或 COM 对象的实例。

语法
New-Object [-typeName] <string> [[-argumentList] <Object[]>] [<CommonParameters>]

New-Object [-comObject] <string> [-strict] [<CommonParameters>]


详细说明
创建 .Net 或 COM 对象的实例。指定 .Net 类的类型,或指定 COM 对象的编程标识符 (ProgID)。默认情况下,键入 .Net 类的完全限定名称时,该 cmdlet 返回对该类的实例的引用。若要创建 COM 对象
的实例,请使用 ComObject 参数并指定对象的 ProgID 作为它的值。


参数
-typeName <string>
指定 .Net 类的完全限定名称。不能同时指定 TypeName 参数和 ComObject 参数。

是否必需? True
位置? 1
默认值
是否接受管道输入? false
是否接受通配符? False

-argumentList <Object[]>
指定传递给 .Net 类的构造函数的参数列表。使用逗号 (,) 分隔列表中的元素。

是否必需? False
位置? 2
默认值
是否接受管道输入? false
是否接受通配符? False

-comObject <string>
COM 对象的编程标识符 (ProgID)。

是否必需? True
位置? 1
默认值
是否接受管道输入? false
是否接受通配符? False

-strict <SwitchParameter>
指定如果试图创建的 COM 对象使用互操作程序集则应当引发的错误。这使您能够将实际 COM 对象与具有 COM 可调用的包装程序的 .Net 对象区分开来。

是否必需? False
位置? named
默认值 false
是否接受管道输入? false
是否接受通配符? False

<CommonParameters>
此 cmdlet 支持通用参数: -Verbose、-Debug、
-ErrorAction、-ErrorVariable 和 -OutVariable。有关详细信息,
请键入 "get-help about_commonparameters"。

输入类型



返回类型
Object


注释


New-Object 提供 VBScript CreateObject 函数的最常用功能。像 VBScript 中 Set objShell = CreateObject("Shell.Application") 这样的语
句可以转换成 Windows PowerShell 中的 $objShell = new-object -comobject "Shell.Application"。

通过使您更容易从命令行和在脚本内处理 .Net 对象,New-Object 扩展了在 Windows Script Host 环境中可用的功能。

有关详细信息,请键入“Get-Help New-Object -detailed”。有关技术信息,请键入“Get-Help New-Object -full”。

在为一个参数指定多个值时,请使用逗号分隔这些值。例如,“<参数名> <值 1>, <值 2>”。


-------------------------- 示例 1 --------------------------

C:\PS>$ver = new-object -typename System.Version -argumentlist "1.2.3.4"
$ver | get-member


此命令使用字符串“1.2.3.4”作为构造函数来创建 System.Version 类型的 .Net 对象。它将对对象的引用存储在 $ver 变量中,并通过管道将它传递给 Get-Member cmdlet 以显示被引用对象的属性
和方法。





-------------------------- 示例 2 --------------------------

C:\PS>$ie = new-object -comobject InternetExplorer.Application
$ie.navigate2("www.microsoft.com")
$ie.visible = $true


此命令创建表示 Internet Explorer 应用程序的 COM 对象的实例。它使用该对象导航到站点,然后将该对象的 visible 属性设置为 $true,使应用程序可见。





-------------------------- 示例 3 --------------------------

C:\PS>$a=new-object -comobject Word.Application -strict
$a.visible=$true


此命令演示:如果所创建的 COM 对象使用互操作程序集,则指定 Strict 参数将使 new-object 生成非中止错误。


New-Object: 被写入管道的对象是该组件的主互操作程序集中类型“Microsoft.Office.Interop.Word.ApplicationClass”的实例。如果此类型公开的成员不是 IDispatch 成员,则在
未安装该主互操作程序集的情况下,为使用此对象而编写的脚本可能无法运行。
所在行:1 字符:14
+ $a=New-Object <<<< -COM Word.Application -Strict; $a.visible=$true


-------------------------- 示例 4 --------------------------

C:\PS>$objshell = new-object -comobject "Shell.Application"
$objshell | get-member
$objshell.ToggleDesktop()


该命令使用 ComObject 参数创建 ProgID 为“Shell.Application”的 COM 对象。它将所得到的对对象的引用存储在 $objShell 变量中,并通过管道将该变量传递给 Get-Member cmdl
et。Get-Member cmdlet 显示有关 COM 对象的属性和方法的信息。在最后一行,调用对象的 ToggleDesktop 方法。它使桌面上所有打开的窗口最小化。






相关链接
Compare-Object
Select-Object
Sort-Object
ForEach-Object
Group-Object
Measure-Object
Tee-Object
Where-Object
viena 2008-03-05
  • 打赏
  • 举报
回复
期待高手一句话~
vrhero 2008-03-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 DanielYWoo 的回复:]
打开注册表看HKEY_CLASSES_ROOT,这些注册过的都可以调用的
你会发现System.Net这个namespace下的所有类都没有在注册表中,所以都不能调用
不明白就是这个,为什么这些都没有注册,如果我手工注册了会不会对系统造成影响,比如安全方面
[/Quote]
在HKEY_CLASSES_ROOT中注册了CLSID的都是COM组件...手工注册不会对系统造成影响...因为没用...COM DLL是有规范的...
DanielYWoo 2008-03-05
  • 打赏
  • 举报
回复
我现在已经有变通的办法了绕过去了,但是这个问题还想弄清楚
duping9626 2008-03-04
  • 打赏
  • 举报
回复
当然是作为COM引用
yiyao1899 2008-03-04
  • 打赏
  • 举报
回复
在编译是选择向COM公开
kbryant 2008-03-04
  • 打赏
  • 举报
回复
恩,调用com可以
水如烟 2008-03-04
  • 打赏
  • 举报
回复
那必须生成COM

如果你要象你现在这般的脚本调用,使用 Windows PowerShell

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧