AdvancedInstaller-自定义操作VBScript-属性未传递

时间:2018-10-14 11:20:00

标签: properties windows-installer custom-action advanced-installer

在尝试通过“自定义操作”中的VBscript设置公共变量时,我当前遇到问题。 关于属性"MYDOMAIN"。 无论我在做什么,该值始终为0。

即使在示例";"之后设置Session.Property("MYDOMAIN")="1"也不能解决问题。

在本地执行VBScript时,可以检索值(至少在变量中)。

请在下面找到我的脚本:

'~~~ Query My Domain
Option Explicit
'On Error Resume Next
Dim objWMISvc : Set objWMISvc = GetObject( "winmgmts:\\.\root\cimv2" )
Dim colItems : Set colItems = objWMISvc.ExecQuery( "Select * from Win32_ComputerSystem" )
Dim objSysInfo : Set objSysInfo = CreateObject("ADSystemInfo")
Dim objComp : Set objComp = GetObject("LDAP://" & objSysInfo.ComputerName)
Dim objCompDN : objCompDN = objComp.distinguishedName
Dim objItem
Dim strComputerDomain
Dim Session
For Each objItem in colItems
    strComputerDomain = objItem.Domain
    ' If objItem.PartOfDomain Then
        ' WScript.Echo "Computer Domain: " & strComputerDomain
      ' Wscript.Echo "Computername: " & strComputerName
    ' End If
Next
If strComputerDomain = "DOMAIN1.loc" Then
   Session.Property("MYDOMAIN")="1" 
elseif strComputerDomain = "DOMAIN2.loc" Then
   call CheckIRL(objCompDN,"(?:Division-)(8[0-9]\d{1,2}|982)-") 
elseif strComputerDomain = "DOMAIN3.loc" Then
   Session.Property("MYDOMAIN")="3"
Else
    if strComputerDomain = "" then
        Session.Property("MYDOMAIN")="0"
    End if
End if
Sub CheckIRL(strReturnValue, strPattern)
   Dim objRegEx : set objRegex = new RegExp
    objRegex.pattern = strPattern
    objRegex.global = true

   If objRegex.Test( strReturnValue ) Then
      Session.Property("MYDOMAIN") = "6"
   Else
      Session.Property("MYDOMAIN") = "7"
   End If
End Sub
Sub CheckSLO(strReturnValue, strPattern)
   Dim objRegEx : set objRegex = new RegExp
    objRegex.pattern = strPattern
    objRegex.global = true

   If objRegex.Test( strReturnValue ) Then
      Session.Property("MYDOMAIN") = "4"
   Else
      Session.Property("MYDOMAIN") = "5"
   End If
End Sub

说实话:我没有主意... 一位朋友将脚本插入InstallShield项目中,可以解析该属性。任何想法表示赞赏:)

2 个答案:

答案 0 :(得分:0)

我建议您尝试通过在VBS代码的每个IF块中插入一个消息框(MsgBox function)来调试VBS操作代码。这只是为了确保您的VBS代码在退出之前确实将相关属性设置为不同于0的值。

只需使用MsgBox语句,如下所示:

MsgBox Session.Property("MYDOMAIN")

显示属性值。

然后,如果VBS确实在退出前确实将属性设置为不同于0的值,则在这种情况下,当该属性恢复为0时,我们将需要有关确切执行顺序的更多详细信息。

答案 1 :(得分:0)

我会尝试一下,检查后会再次给您。 同时,我创建了第二个msi文件来进行配置...不是最好的解决方案,但它似乎可以工作:)