You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在InstallShield 2015的MSI安装程序中传入十六进制值?

在InstallShield 2015中处理命令行传入的十六进制LCID并写入注册表

下面提供几种可行的解决方法:

方法一:用InstallScript脚本转换十六进制到十进制

  • 先在InstallShield里定义一个公共属性(比如LCID_HEX),用来接收命令行传入的十六进制值,命令行格式改为:msiexec /i setup.msi LCID_HEX=0x9
  • 添加InstallScript脚本,在安装流程的合适节点(比如OnFirstUIBefore)完成转换:
    function OnFirstUIBefore()
    STRING szLCIDHex, szLCIDDec;
    NUMBER nResult;
    begin
       // 读取命令行传入的十六进制LCID
       MsiGetProperty(ISMSI_HANDLE, "LCID_HEX", szLCIDHex, nResult);
       if (szLCIDHex != "") then
          // 去掉0x前缀,转换为十进制数值
          szLCIDHex = Right(szLCIDHex, Length(szLCIDHex)-2);
          nResult = StrToNum(szLCIDHex, 16);
          // 将转换后的十进制值存入用于注册表写入的属性LCID
          MsiSetProperty(ISMSI_HANDLE, "LCID", NumToStr(nResult));
       endif;
       // 保留原有脚本逻辑...
    end;
    
  • 最后在注册表配置界面,选择DWORD类型,用[LCID]作为值,安装时就会把转换后的十进制值以DWORD格式写入注册表(MSI会自动处理十进制到DWORD的存储转换)

方法二:直接传入十进制值(最简单方案)

如果可以提前将十六进制LCID转成十进制,直接用命令行传入十进制值即可:msiexec /i setup.msi LCID=9(0x9对应的十进制是9)。这种情况下无需额外脚本,直接把[LCID]属性绑定到DWORD类型的注册表项,MSI会自动将十进制数值转为正确的DWORD格式存储。

方法三:用VBScript自定义动作完成转换

  • 添加一个VBScript类型的自定义动作,设置执行时机为InstallInitialize之后,属性设为公共
  • VBScript代码如下:
    Dim objMSI, szHexLCID, nDecLCID
    Set objMSI = CreateObject("WindowsInstaller.Installer")
    szHexLCID = objMSI.Property("LCID_HEX")
    If szHexLCID <> "" Then
       ' 移除0x前缀并转换为十进制
       szHexLCID = Replace(szHexLCID, "0x", "")
       nDecLCID = CLng("&H" & szHexLCID)
       objMSI.Property("LCID") = CStr(nDecLCID)
    End If
    Set objMSI = Nothing
    
  • 命令行传入msiexec /i setup.msi LCID_HEX=0x9,注册表项依然使用[LCID]属性写入DWORD类型即可

内容的提问来源于stack exchange,提问作者logeeks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:06:19