首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VBScript项目中调用InstallScript

如何在VBScript项目中调用InstallScript
EN

Stack Overflow用户
提问于 2017-09-18 14:26:25
回答 2查看 375关注 0票数 0

我想使用一个VB脚本脚本文件作为InstallScript项目先决条件的目标。我需要使用VB脚本,因为我必须检查几种不可能使用IS先决条件编辑器中的常规条件(即操作系统条件是OR,其他条件是和)。

我已经看到了链接here,但它不适用于InstallScript项目。

我也尝试过简单地命名在“指定您希望启动的应用程序”组合体中,但这似乎不起作用。( .vbs脚本只显示一个模态对话框,这样我就可以测试基本功能。)

这能办到吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-19 17:06:53

事实证明,我的VBS脚本一直在工作,但我并没有在注册表的正确部分查找我需要作出决定的键。在64位框上,32位进程查看(被神奇地重定向以查看) Wow6432Node子键。所以如果我在找钥匙

HKLM\Software\BoGusman

这个过程实际上是

HKLM\Software\Wow6432Node\BoGusman

目标键存在于64位注册表中,但在Wow6432Node中不存在。在两个位置创建密钥解决了问题。

感谢“JNevill”和“Steven”让我走上正轨。

票数 0
EN

Stack Overflow用户

发布于 2017-09-19 06:09:55

在VBScripts中调试InstallShield是件很麻烦的事。旧的调试,即写入日志文件,是最好的,因为,您将无法捕获错误信息,等等。

另外,从InstallShield读取和写入注册表也可以通过winmgmts完成,但这是一种痛苦。这里有一个例子说明了这一点。由于我们的应用程序使用32位注册表项,并且不知道它是由32位还是64位Windows处理的,所以我们必须检查32位注册表项(即Wow6432Node)的两个位置。

下面是我们用来读取注册表的一些代码:

代码语言:javascript
复制
Option Explicit

Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002

Dim SoftVersion
SoftVersion = RegReadString("HKLM\SOFTWARE\Co\Software\Version")
If SoftVersion = "" Then
  SoftVersion = RegReadString("HKLM\SOFTWARE\Wow6432Node\Co\Software\Version")
End If

Function RegReadString(path)
  ' RegRead = CreateObject("WScript.Shell").RegRead(path)
  Dim objReg, hkroot, pos, posNext, keyPath, valueName, value
  Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
  hkroot = HKEY_CURRENT_USER
  If Left(path, 5) = "HKCU\" Then
    hkroot = HKEY_CURRENT_USER
    path = Mid(path, 6)
  ElseIf Left(path, 5) = "HKLM\" Then
    hkroot = HKEY_LOCAL_MACHINE
    path = Mid(path, 6)
  End If
  pos = InStr(path, "\")
  posNext = InStr(pos + 1, path, "\")
  While posNext > 0
    pos = posNext
    posNext = InStr(pos + 1, path, "\")
  Wend
  keyPath = Left(path, pos - 1)
  valueName = Mid(path, pos + 1)
  objReg.GetStringValue hkroot, keyPath, valueName, value
  If IsNull(value) Then
    RegReadString = ""
  Else
    RegReadString = value
  End If
End Function

Sub RegWriteString(path, value)
  Dim objReg, hkroot, pos, posNext, keyPath, valueName
  Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
  hkroot = HKEY_CURRENT_USER
  If Left(path, 5) = "HKCU\" Then
    hkroot = HKEY_CURRENT_USER
    path = Mid(path, 6)
  ElseIf Left(path, 5) = "HKLM\" Then
    hkroot = HKEY_LOCAL_MACHINE
    path = Mid(path, 6)
  End If
  pos = InStr(path, "\")
  posNext = InStr(pos + 1, path, "\")
  While posNext > 0
    pos = posNext
    posNext = InStr(pos + 1, path, "\")
  Wend
  keyPath = Left(path, pos - 1)
  valueName = Mid(path, pos + 1)
  objReg.SetStringValue hkroot, keyPath, valueName, value
End Sub
代码语言:javascript
复制
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46281796

复制
相关文章

相似问题

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