首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inno安装程序枚举器

Inno安装程序枚举器
EN

Stack Overflow用户
提问于 2012-12-21 00:54:51
回答 1查看 671关注 0票数 1

我正在尝试使用WbemScripting.SWbemLocator对象枚举IIsWebServer的Properties_属性。我的目标是使用PascalScript代码来检索网站的服务器绑定。在VBScript中,我有以下代码:

代码语言:javascript
复制
Dim site, binding, url
Set site = GetObject("IIS://localhost/W3SVC/1")
For Each binding In site.ServerBindings
    url = binding
    Exit For
Next
If Left(url, 1) = ":" Then
    url = "localhost" & url
End If
If Right(url, 1) Then
    url = Left(url, Len(url) - 1)
End If
Set site = Nothing

我手写了这段代码,所以它可能不准确,但我想用PascalScript以类似的方式完成它。我被卡住的部分是通过ServerBindings枚举。为了让它正常工作,我尝试了很多方法,目前,我有以下PascalScript:

代码语言:javascript
复制
function GetWebSites() : Array of String;
var
    locatorObj, providerObj, nodeObj, appRoot: Variant;
    props : String;
begin
    locatorObj := CreateOleObject('WbemScripting.SWbemLocator');
    providerObj := locatorObj.ConnectServer(GetComputerNameString(), 'root/MicrosoftIISv2');
    nodeObj := providerObj.Get('IIsWebServer=''W3SVC/1''');

    props := nodeObj.Properties_;
    // How do I enumerate through the properties here?  Or, my actual goal is from this point how do I get the ServerBindings (or the first element in the ServerBindings array)?

结束;

在JavaScript中,要获得ServerBindings,您必须输入类似于以下内容的内容:

代码语言:javascript
复制
var e = new Enumerator(nodeObj.Properties_);
for (; ! e.atEnd(); e.moveNext()) {
    var prop = e.item();
    if (prop.Name == 'ServerBindings') {
        // Do something
    }
}

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-12-21 16:21:22

不幸的是,Inno代码不支持本机执行COM枚举,但您可以通过使用助手DLL来获得支持。详情请参见here

但是,如果您只想访问一个已知的命名属性,那么就这么做吧。

代码语言:javascript
复制
nodeObj.ServerBindings
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13976912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档